LA Fitness and Planet Fitness are two large gym chains that span many locations in the U.S., Canada and Latin America. While both of these gym chains are big names in the fitness industry, the way the two operate are slightly different. Planet Fitness prides itself on being an inclusive, judgment-free exercise environment. The basis of Planet Fitness is accessible exercise equipment for an audience with small to average fitness goals. Most of their clubs are open 24 hours in order to work with any schedule, and they provide free fitness training upon request. Planet Fitness works within a business model of significantly low prices for customers and a relatively high turn around of customers; thus, they must maintain very high sale levels to keep their customer numbers and overall finances at successful levels. LA Fitness offers slightly more comprehensive services than Planet Fitness. LA Fitness operates more like a fitness club than a standardized gym. They offer exercise equipment as well as group fitness classes and personal training. They also sometimes offer perks such as basketball and racquetball courts, heated pools, day care services, and so on. That being said, their fees and monthly membership expenses, while still reasonable for a fitness club, are significantly higher than Planet Fitness. While they still need to focus on high sales to get as many members as possible, they put a lot of focus on their competitive resources to drive sales as well as member loyalty and retention. Both gym chains have to focus strongly on marketing strategy to be constantly gaining new members, but because of their internal differences, their marketing strategies may be a bit different. To explore this idea, I completed a network analysis by collecting Twitter hashtags #PlanetFitness and #LAFitness to compare how Twitter users involved with these companies organize in the online community. Network anlysis can show several factors about social connectivity and how information in a network flows. For example, using network analyis, we can asses key influences (opinion leaders), bridges or connectors within clusters of the community, or unity and divides within the community. By seeing how these networks function on this platform, we may be able to describe the networks of each chain to see if their social media correlates with their business strategies and to see where certain marketing strategies may fit in to these networks with the hopes of further improving sales and membership numbers.

A few things can be observed from these networks. In this case, the data for LA Fitness included 46 users and the data for Planet Fitnes included 44 users. Thus, the two hashtags have similar numbers of members involved in the communities and a similar number of connections within those communities. How those conenctions surface, though, differ. Observing the visuals of the networks, a few things stand out. The network for LA Fitness includes one main cluster of interacting users and several small groups of interacting users. LA Fitness’s network is cleaner. There are less connections running throughout the group, rather many users focus mainingly around one user. Planet Fitness’s network is a bit messier than LA Fitness’s. This network seems to have more connections. While there do seem to be one larger cluster and a few smaller clusters, these clusters seem less exclusive and connect to one another on several levels. There is more connectivity in Planet Fitness’s network than LA Fitnesses’s. To learn more about these patterns we can look at several factors. Firstly, we can find each network’s centralization. If a network is highly centralized, it is mainly centered around fewer users with other users interacting mainly with those few users. High centralization in a network leads to a less democratic, equal network, but does lead to a more efficient network. In this way, a higher centralization might be easier to target key leaders within the network for getting out messages, which may in turn be helpful for marketing because you can see who hold the most influence in the networks and what they are posting about. A lower level of centralization means that the network is more democratic and equal, but it tends to be messier and relatively leaderless. In this case, upon calculation, Planet Fitness has a more centralized nentwork than LA Fitness. Planet Fitness, then might focus more on finding certain popular users within the group who may act as decision leaders for the rest of the group then LA Fitness when looking at how to market to their current gym goers and how to strategize for future sales.

One factor we can look at here are the most retweeted users in the networks. The top retweeted users in the LA Fitness network are dreed_10, 1facebygrace, ehfoundation237, rather_unique91, and official_mo5. In Planet Fitness’s network, the users who are top retweeted are coralrae21, dentistmel, jupiterisvelvet, yellaambaa, and bimboontheloose. In either case, it may be beneficial to observe these users to find out what they are posting and why people may be following their input. It may also be benficial these leaders in advertising and marketing. The top 5 participants who have retweeted others the most in LA Fitnesss’s network are encantoman, mimicurvaceous, aos_vavi, js23__, and bigan36. The top users who have retweeted others the most in Planet Fitness’s network are mellisaswigart, dearlyndsey09, greek_toes, arb913, and jupiterisvelvet. These users are clearly active within their netorks and can be observed to strategize for thinking about engaing with other social media participants to get the most interaction within groups. Another thing to consider are the networks’ densities, that is to say the extent to which people in the network know each other. LA Fitness has a slightly higher density than Planet Fitness.This lends to the possibility that LA Fitness’s network includes more people that are conencted to one another. This might suggest that LA Fitness could get more people by advertising outside of their network or might keep more internal members by spreading messages inside of the group.

From a business perspective, LA Fitness and Planet Fitness share similar networks within their respective Twitter hashtags. LA Fitness is relatively centralized and includes one main cluster with serveral small groups outside of that cluster. Additionally, people within this network tend to be connected to each other more closely. Planet Fitness is also a relatively centralized network, moreso than LA Fitness, but includes more bridges between users, meaning that the users are connected to one another more widely and with more connections.By looking at these factors and by looking at the top connecting and connected with users in the networks, we can observe how the networks for these gym chains are similar and how perhaps the structure of these two different busiensses effect how their audience’s interact. Planet Fitness is a large chain who focuses on inclusion and conviencnce but less on amentities and higher pricing than LA Fitness. Planet Fitness’s network includes more bridges and connections than LA Fitness, which lends itself to PLanet Fitness’s larger span of audience. LA Fitness tends to be more high-end than Planet Fitness and focuses on offering many amenties. LA Fitness’s network is more clustered and less connected with outsiders outside of the immediate poplarity of the network. From a marketing perspective, Planet Fitness may want to focus on the bridges as possibilites for getting the word out to wider audiences and thus get more sales in quick time. LA fitness may want to focus on the main decision leaders in their clusters to determine what people are talking about to relay that into keeping their current members and network. Additionally, the two chains could learn from one another’s networks to expand their comapnies in the ways that the other does.

LS0tDQp0aXRsZTogIk5ldHdvcmsgQW5hbHlzaXMgb2YgVHdvIEd5bSBDaGFpbnM6IFBsYW5ldCBGaXRuZXNzIGFuZCBMQSBGaXRuZXNzIg0KYXV0aG9yOiAiQW5uYW1hcmllIFdhZGlhayINCmRhdGU6ICIxMS8yNy8yMDE3Ig0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOiBkZWZhdWx0DQogIGh0bWxfZG9jdW1lbnQ6IGRlZmF1bHQNCi0tLQ0KDQpMQSBGaXRuZXNzIGFuZCBQbGFuZXQgRml0bmVzcyBhcmUgdHdvIGxhcmdlIGd5bSBjaGFpbnMgdGhhdCBzcGFuIG1hbnkgbG9jYXRpb25zIGluIHRoZSBVLlMuLCBDYW5hZGEgYW5kIExhdGluIEFtZXJpY2EuIFdoaWxlIGJvdGggb2YgdGhlc2UgZ3ltIGNoYWlucyBhcmUgYmlnIG5hbWVzIGluIHRoZSBmaXRuZXNzIGluZHVzdHJ5LCB0aGUgd2F5IHRoZSB0d28gb3BlcmF0ZSBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50LiBQbGFuZXQgRml0bmVzcyBwcmlkZXMgaXRzZWxmIG9uIGJlaW5nIGFuIGluY2x1c2l2ZSwganVkZ21lbnQtZnJlZSBleGVyY2lzZSBlbnZpcm9ubWVudC4gVGhlIGJhc2lzIG9mIFBsYW5ldCBGaXRuZXNzIGlzIGFjY2Vzc2libGUgZXhlcmNpc2UgZXF1aXBtZW50IGZvciBhbiBhdWRpZW5jZSB3aXRoIHNtYWxsIHRvIGF2ZXJhZ2UgZml0bmVzcyBnb2Fscy4gTW9zdCBvZiB0aGVpciBjbHVicyBhcmUgb3BlbiAyNCBob3VycyBpbiBvcmRlciB0byB3b3JrIHdpdGggYW55IHNjaGVkdWxlLCBhbmQgdGhleSBwcm92aWRlIGZyZWUgZml0bmVzcyB0cmFpbmluZyB1cG9uIHJlcXVlc3QuIFBsYW5ldCBGaXRuZXNzIHdvcmtzIHdpdGhpbiBhIGJ1c2luZXNzIG1vZGVsIG9mIHNpZ25pZmljYW50bHkgbG93IHByaWNlcyBmb3IgY3VzdG9tZXJzIGFuZCBhIHJlbGF0aXZlbHkgaGlnaCB0dXJuIGFyb3VuZCBvZiBjdXN0b21lcnM7IHRodXMsIHRoZXkgbXVzdCBtYWludGFpbiB2ZXJ5IGhpZ2ggc2FsZSBsZXZlbHMgdG8ga2VlcCB0aGVpciBjdXN0b21lciBudW1iZXJzIGFuZCBvdmVyYWxsIGZpbmFuY2VzIGF0IHN1Y2Nlc3NmdWwgbGV2ZWxzLiBMQSBGaXRuZXNzIG9mZmVycyBzbGlnaHRseSBtb3JlIGNvbXByZWhlbnNpdmUgc2VydmljZXMgdGhhbiBQbGFuZXQgRml0bmVzcy4gTEEgRml0bmVzcyBvcGVyYXRlcyBtb3JlIGxpa2UgYSBmaXRuZXNzIGNsdWIgdGhhbiBhIHN0YW5kYXJkaXplZCBneW0uIFRoZXkgb2ZmZXIgZXhlcmNpc2UgZXF1aXBtZW50IGFzIHdlbGwgYXMgZ3JvdXAgZml0bmVzcyBjbGFzc2VzIGFuZCBwZXJzb25hbCB0cmFpbmluZy4gVGhleSBhbHNvIHNvbWV0aW1lcyBvZmZlciBwZXJrcyBzdWNoIGFzIGJhc2tldGJhbGwgYW5kIHJhY3F1ZXRiYWxsIGNvdXJ0cywgaGVhdGVkIHBvb2xzLCBkYXkgY2FyZSBzZXJ2aWNlcywgYW5kIHNvIG9uLiBUaGF0IGJlaW5nIHNhaWQsIHRoZWlyIGZlZXMgYW5kIG1vbnRobHkgbWVtYmVyc2hpcCBleHBlbnNlcywgd2hpbGUgc3RpbGwgcmVhc29uYWJsZSBmb3IgYSBmaXRuZXNzIGNsdWIsIGFyZSBzaWduaWZpY2FudGx5IGhpZ2hlciB0aGFuIFBsYW5ldCBGaXRuZXNzLiBXaGlsZSB0aGV5IHN0aWxsIG5lZWQgdG8gZm9jdXMgb24gaGlnaCBzYWxlcyB0byBnZXQgYXMgbWFueSBtZW1iZXJzIGFzIHBvc3NpYmxlLCB0aGV5IHB1dCBhIGxvdCBvZiBmb2N1cyBvbiB0aGVpciBjb21wZXRpdGl2ZSByZXNvdXJjZXMgdG8gZHJpdmUgc2FsZXMgYXMgd2VsbCBhcyBtZW1iZXIgbG95YWx0eSBhbmQgcmV0ZW50aW9uLiBCb3RoIGd5bSBjaGFpbnMgaGF2ZSB0byBmb2N1cyBzdHJvbmdseSBvbiBtYXJrZXRpbmcgc3RyYXRlZ3kgdG8gYmUgY29uc3RhbnRseSBnYWluaW5nIG5ldyBtZW1iZXJzLCBidXQgYmVjYXVzZSBvZiB0aGVpciBpbnRlcm5hbCBkaWZmZXJlbmNlcywgdGhlaXIgbWFya2V0aW5nIHN0cmF0ZWdpZXMgbWF5IGJlIGEgYml0IGRpZmZlcmVudC4gVG8gZXhwbG9yZSB0aGlzIGlkZWEsIEkgY29tcGxldGVkIGEgbmV0d29yayBhbmFseXNpcyBieSBjb2xsZWN0aW5nIFR3aXR0ZXIgaGFzaHRhZ3MgI1BsYW5ldEZpdG5lc3MgYW5kICNMQUZpdG5lc3MgdG8gY29tcGFyZSBob3cgVHdpdHRlciB1c2VycyBpbnZvbHZlZCB3aXRoIHRoZXNlIGNvbXBhbmllcyBvcmdhbml6ZSBpbiB0aGUgb25saW5lIGNvbW11bml0eS4gTmV0d29yayBhbmx5c2lzIGNhbiBzaG93IHNldmVyYWwgZmFjdG9ycyBhYm91dCBzb2NpYWwgY29ubmVjdGl2aXR5IGFuZCBob3cgaW5mb3JtYXRpb24gaW4gYSBuZXR3b3JrIGZsb3dzLiBGb3IgZXhhbXBsZSwgdXNpbmcgbmV0d29yayBhbmFseWlzLCB3ZSBjYW4gYXNzZXMga2V5IGluZmx1ZW5jZXMgKG9waW5pb24gbGVhZGVycyksIGJyaWRnZXMgb3IgY29ubmVjdG9ycyB3aXRoaW4gY2x1c3RlcnMgb2YgdGhlIGNvbW11bml0eSwgb3IgdW5pdHkgYW5kIGRpdmlkZXMgd2l0aGluIHRoZSBjb21tdW5pdHkuIEJ5IHNlZWluZyBob3cgdGhlc2UgbmV0d29ya3MgZnVuY3Rpb24gb24gdGhpcyBwbGF0Zm9ybSwgd2UgbWF5IGJlIGFibGUgdG8gZGVzY3JpYmUgdGhlIG5ldHdvcmtzIG9mIGVhY2ggY2hhaW4gdG8gc2VlIGlmIHRoZWlyIHNvY2lhbCBtZWRpYSBjb3JyZWxhdGVzIHdpdGggdGhlaXIgYnVzaW5lc3Mgc3RyYXRlZ2llcyBhbmQgdG8gc2VlIHdoZXJlIGNlcnRhaW4gbWFya2V0aW5nIHN0cmF0ZWdpZXMgbWF5IGZpdCBpbiB0byB0aGVzZSBuZXR3b3JrcyB3aXRoIHRoZSBob3BlcyBvZiBmdXJ0aGVyIGltcHJvdmluZyBzYWxlcyBhbmQgbWVtYmVyc2hpcCBudW1iZXJzLiANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkodHdpdHRlUikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHFkYXApDQpsaWJyYXJ5KG5ldHdvcmtEMykNCmxpYnJhcnkoaWdyYXBoKQ0KbGlicmFyeShzdHJpbmdyKSANCg0Kc2V0dXBfdHdpdHRlcl9vYXV0aCgncGVGTGxzVzVKcFNpZDNqYnlNUVVmbFdubScsICdjSHU4S0ZUWFVBQW1kaFFnY3FaanlwMTFCQ1FUVU9aOTBNQzhOcWd5Y0V2dmVuSmpXUCcsIGFjY2Vzc190b2tlbj0nMTkxOTUyNDM4LXF0SVlIczVwZ0xLaURSOTVpV2J3NTltSkpRWndxaTJrVElTUm5ON2gnLCBhY2Nlc3Nfc2VjcmV0PSc3SGN3amNmRm5mT2xMMm9Qc0lKdEQyQTYxZ1FMN21aSWU2RDhoYUNZaFFLdFMnKQ0KDQpMQUZpdG5lc3MxIDwtIHR3TGlzdFRvREYoc2VhcmNoVHdpdHRlcigiI2xhZml0bmVzcyIsIG49MTAwMCwgbGFuZz1OVUxMLHNpbmNlPU5VTEwsIHVudGlsPU5VTEwsbG9jYWxlPU5VTEwsIGdlb2NvZGU9TlVMTCwgc2luY2VJRD1OVUxMLCBtYXhJRD1OVUxMLHJlc3VsdFR5cGU9TlVMTCwgcmV0cnlPblJhdGVMaW1pdD0xMjApKQ0KDQp3cml0ZS5jc3YoTEFGaXRuZXNzMSwgImxhZml0bmVzczEuY3N2IikNCg0KDQpsYWZpdG5lc3MxIDwtIHJlYWQuY3N2KCJsYWZpdG5lc3MxLmNzdiIsIGhlYWRlcj1UUlVFKQ0KDQpsYWZpdG5lc3MxPC1sYWZpdG5lc3MxWzE6MTAwMCxdDQoNCnNwID0gc3BsaXQobGFmaXRuZXNzMSwgbGFmaXRuZXNzMSRpc1JldHdlZXQpDQpydCA9IG11dGF0ZShzcFtbJ1RSVUUnXV0sIHNlbmRlciA9IHN1YnN0cih0ZXh0LCA1LCByZWdleHByKCc6Jyx0ZXh0KSAtMSkpDQplbCA9IGFzLmRhdGEuZnJhbWUoY2JpbmQoc2VuZGVyID0gdG9sb3dlcihydCRzZW5kZXIpLCByZWNlaXZlciA9IHRvbG93ZXIocnQkc2NyZWVuTmFtZSkpKQ0KZWwgPSBjb3VudChlbCwgc2VuZGVyLCByZWNlaXZlcikgDQoNCmxhZml0bmVzczFfcnRfZ3JhcGggPC0gZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKGQ9ZWwsIGRpcmVjdGVkPVQpDQoNCmdsYXkgPSBsYXlvdXQuZnJ1Y2h0ZXJtYW4ucmVpbmdvbGQobGFmaXRuZXNzMV9ydF9ncmFwaCkNCnBsb3QobGFmaXRuZXNzMV9ydF9ncmFwaCkNCg0KDQpnbGF5ID0gbGF5b3V0LmZydWNodGVybWFuLnJlaW5nb2xkKGxhZml0bmVzczFfcnRfZ3JhcGgpDQpwYXIoYmc9ImdyYXkxNSIsIG1hcj1jKDEsMSwxLDEpKQ0KcGxvdChsYWZpdG5lc3MxX3J0X2dyYXBoLCBsYXlvdXQ9Z2xheSwNCiAgICAgdmVydGV4LmNvbG9yPSJncmF5MjUiLA0KICAgICB2ZXJ0ZXguc2l6ZT0oZGVncmVlKGxhZml0bmVzczFfcnRfZ3JhcGgsIG1vZGUgPSAiaW4iKSksICNzaXplZCBieSBpbi1kZWdyZWUgY2VudHJhbGl0eQ0KICAgICB2ZXJ0ZXgubGFiZWwgPSBOQSwNCiAgICAgZWRnZS5hcnJvdy5zaXplPTAuOCwNCiAgICAgZWRnZS5hcnJvdy53aWR0aD0wLjUsDQogICAgIGVkZ2Uud2lkdGg9ZWRnZV9hdHRyKGxhZml0bmVzczFfcnRfZ3JhcGgpJG4vMTAsICNzaXplZCBieSBlZGdlIHdlaWdodA0KICAgICBlZGdlLmNvbG9yPWhzdihoPS45NSwgcz0xLCB2PS43LCBhbHBoYT0wLjUpKQ0KdGl0bGUoIkxBIEZpdG5lc3MxIFJldHdlZXQgTmV0d29yayIsIGNleC5tYWluPTEsIGNvbC5tYWluPSJncmF5OTUiKQ0KDQpnbGF5ID0gbGF5b3V0LmZydWNodGVybWFuLnJlaW5nb2xkKGxhZml0bmVzczFfcnRfZ3JhcGgpDQpwYXIoYmc9ImdyYXkxNSIsIG1hcj1jKDEsMSwxLDEpKQ0KcGxvdChsYWZpdG5lc3MxX3J0X2dyYXBoLCBsYXlvdXQ9Z2xheSwNCiAgICAgdmVydGV4LmNvbG9yPSJncmF5MjUiLA0KICAgICB2ZXJ0ZXguc2l6ZT0oZGVncmVlKGxhZml0bmVzczFfcnRfZ3JhcGgsIG1vZGUgPSAiaW4iKSksICNzaXplZCBieSBpbi1kZWdyZWUgY2VudHJhbGl0eQ0KICAgICB2ZXJ0ZXgubGFiZWwuZmFtaWx5PSJzYW5zIiwNCiAgICAgdmVydGV4LnNoYXBlPSJjaXJjbGUiLCAgI2NhbiBhbHNvIHRyeSAic3F1YXJlIiwgInJlY3RhbmdsZSIsIGV0Yy4gTW9yZSBpbiBpZ3JhcGggbWFudWFsDQogICAgIHZlcnRleC5sYWJlbC5jb2xvcj1oc3YoaD0wLCBzPTAsIHY9Ljk1LCBhbHBoYT0wLjUpLA0KICAgICB2ZXJ0ZXgubGFiZWwuY2V4PShkZWdyZWUobGFmaXRuZXNzMV9ydF9ncmFwaCwgbW9kZSA9ICJpbiIpKS8zMDAsICNzaXplZCBieSBpbi1kZWdyZWUgY2VudHJhbGl0eQ0KICAgICBlZGdlLmFycm93LnNpemU9MC44LA0KICAgICBlZGdlLmFycm93LndpZHRoPTAuNSwNCiAgICAgZWRnZS53aWR0aD1lZGdlX2F0dHIobGFmaXRuZXNzMV9ydF9ncmFwaCkkbi8xMCwgI3NpemVkIGJ5IGVkZ2Ugd2VpZ2h0DQogICAgIGVkZ2UuY29sb3I9aHN2KGg9Ljk1LCBzPTEsIHY9LjcsIGFscGhhPTAuNSkpDQp0aXRsZSgiTEEgRml0bmVzczEgUmV0d2VldCBOZXR3b3JrIiwgY2V4Lm1haW49MSwgY29sLm1haW49ImdyYXk5NSIpDQoNCmVjb3VudChsYWZpdG5lc3MxX3J0X2dyYXBoKSAjdGhlIG51bWJlciBvZiBlZGdlcw0KDQp2Y291bnQobGFmaXRuZXNzMV9ydF9ncmFwaCkgI3RoZSBudW1iZXIgb2YgdmVydGljZXMNCg0KRShsYWZpdG5lc3MxX3J0X2dyYXBoKVsxOjUwXSAjbGlzdCB0aGUgZmlyc3QgNTAgZWRnZXMNCg0KVihsYWZpdG5lc3MxX3J0X2dyYXBoKVsxOjUwXSAjbGlzdCB0aGUgZmlyc3QgNTAgdmVydGV4IGlkcw0KDQplZGdlX2RlbnNpdHkobGFmaXRuZXNzMV9ydF9ncmFwaCwgbG9vcHM9RikNCg0KI0NhbGN1bGF0ZSBjZW50cmFsaXphdGlvbg0KY2VudHJfZGVncmVlKGxhZml0bmVzczFfcnRfZ3JhcGgsIG1vZGUgPSBjKCJpbiIpLCBsb29wcyA9IFRSVUUsbm9ybWFsaXplZCA9IFRSVUUpJGNlbnRyYWxpemF0aW9uDQoNCiNDYWxjdWxhdGUgaW4tZGVncmVlIGNlbnRyYWxpdHkNCmluZGVncmVlIDwtIHNvcnQoZGVncmVlKGxhZml0bmVzczFfcnRfZ3JhcGgsbW9kZSA9ICJpbiIpLGRlY3JlYXNpbmcgPSBUUlVFKQ0KaW5kZWdyZWVbMToyMF0gI3Nob3cgdGhlIHRvcCB2ZXJ0aWNlcyBieSBpbi1kZWdyZWUgDQoNCm91dGRlZ3JlZSA8LSBzb3J0KGRlZ3JlZShsYWZpdG5lc3MxX3J0X2dyYXBoLG1vZGUgPSAib3V0IiksZGVjcmVhc2luZyA9IFRSVUUpDQpvdXRkZWdyZWVbMToyMF0gI3Nob3cgdGhlIHRvcCB2ZXJ0aWNlcyBieSBvdXQtZGVncmVlDQoNCmJ0IDwtIHNvcnQoYmV0d2Vlbm5lc3MobGFmaXRuZXNzMV9ydF9ncmFwaCwgZGlyZWN0ZWQ9Riwgd2VpZ2h0cz1OQSksIGRlY3JlYXNpbmcgPSBUUlVFKQ0KYnRbMToyMF0gI3Nob3cgdGhlIHRvcCB2ZXJ0aWNlcyBieSBiZXR3ZWVubmVzcyBjZW50cmFsaXR5IA0KDQoNCmBgYA0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpQbGFuZXRGaXRuZXNzMSA8LSB0d0xpc3RUb0RGKHNlYXJjaFR3aXR0ZXIoIiNwbGFuZXRmaXRuZXNzIiwgbj0xMDAwLCBsYW5nPU5VTEwsc2luY2U9TlVMTCwgdW50aWw9TlVMTCxsb2NhbGU9TlVMTCwgZ2VvY29kZT1OVUxMLCBzaW5jZUlEPU5VTEwsIG1heElEPU5VTEwscmVzdWx0VHlwZT1OVUxMLCByZXRyeU9uUmF0ZUxpbWl0PTEyMCkpDQoNCndyaXRlLmNzdihQbGFuZXRGaXRuZXNzMSwgInBsYW5ldGZpdG5lc3MxLmNzdiIpDQoNCnBsYW5ldGZpdG5lc3MxIDwtIHJlYWQuY3N2KCJwbGFuZXRmaXRuZXNzMS5jc3YiLCBoZWFkZXI9VFJVRSkNCg0KcGxhbmV0Zml0bmVzczE8LXBsYW5ldGZpdG5lc3MxWzE6MTAwMCxdDQoNCnNwMSA9IHNwbGl0KHBsYW5ldGZpdG5lc3MxLCBwbGFuZXRmaXRuZXNzMSRpc1JldHdlZXQpDQpydDEgPSBtdXRhdGUoc3AxW1snVFJVRSddXSwgc2VuZGVyID0gc3Vic3RyKHRleHQsIDUsIHJlZ2V4cHIoJzonLHRleHQpIC0xKSkNCmVsMSA9IGFzLmRhdGEuZnJhbWUoY2JpbmQoc2VuZGVyID0gdG9sb3dlcihydDEkc2VuZGVyKSwgcmVjZWl2ZXIgPSB0b2xvd2VyKHJ0MSRzY3JlZW5OYW1lKSkpDQplbDEgPSBjb3VudChlbDEsIHNlbmRlciwgcmVjZWl2ZXIpIA0KDQpwbGFuZXRmaXRuZXNzMV9ydF9ncmFwaCA8LSBncmFwaF9mcm9tX2RhdGFfZnJhbWUoZD1lbDEsIGRpcmVjdGVkPVQpDQoNCmdsYXkxID0gbGF5b3V0LmZydWNodGVybWFuLnJlaW5nb2xkKHBsYW5ldGZpdG5lc3MxX3J0X2dyYXBoKQ0KcGxvdChwbGFuZXRmaXRuZXNzMV9ydF9ncmFwaCkNCg0KDQpnbGF5MSA9IGxheW91dC5mcnVjaHRlcm1hbi5yZWluZ29sZChwbGFuZXRmaXRuZXNzMV9ydF9ncmFwaCkNCnBhcihiZz0iZ3JheTE1IiwgbWFyPWMoMSwxLDEsMSkpDQpwbG90KHBsYW5ldGZpdG5lc3MxX3J0X2dyYXBoLCBsYXlvdXQ9Z2xheSwNCiAgICAgdmVydGV4LmNvbG9yPSJncmF5MjUiLA0KICAgICB2ZXJ0ZXguc2l6ZT0oZGVncmVlKHBsYW5ldGZpdG5lc3MxX3J0X2dyYXBoLCBtb2RlID0gImluIikpLCAjc2l6ZWQgYnkgaW4tZGVncmVlIGNlbnRyYWxpdHkNCiAgICAgdmVydGV4LmxhYmVsID0gTkEsDQogICAgIGVkZ2UuYXJyb3cuc2l6ZT0wLjgsDQogICAgIGVkZ2UuYXJyb3cud2lkdGg9MC41LA0KICAgICBlZGdlLndpZHRoPWVkZ2VfYXR0cihwbGFuZXRmaXRuZXNzMV9ydF9ncmFwaCkkbi8xMCwgI3NpemVkIGJ5IGVkZ2Ugd2VpZ2h0DQogICAgIGVkZ2UuY29sb3I9aHN2KGg9Ljk1LCBzPTEsIHY9LjcsIGFscGhhPTAuNSkpDQp0aXRsZSgiUGxhbmV0IEZpdG5lc3MxIFJldHdlZXQgTmV0d29yayIsIGNleC5tYWluPTEsIGNvbC5tYWluPSJncmF5OTUiKQ0KDQpnbGF5MSA9IGxheW91dC5mcnVjaHRlcm1hbi5yZWluZ29sZChwbGFuZXRmaXRuZXNzMV9ydF9ncmFwaCkNCnBhcihiZz0iZ3JheTE1IiwgbWFyPWMoMSwxLDEsMSkpDQpwbG90KHBsYW5ldGZpdG5lc3MxX3J0X2dyYXBoLCBsYXlvdXQ9Z2xheSwNCiAgICAgdmVydGV4LmNvbG9yPSJncmF5MjUiLA0KICAgICB2ZXJ0ZXguc2l6ZT0oZGVncmVlKHBsYW5ldGZpdG5lc3MxX3J0X2dyYXBoLCBtb2RlID0gImluIikpLCAjc2l6ZWQgYnkgaW4tZGVncmVlIGNlbnRyYWxpdHkNCiAgICAgdmVydGV4LmxhYmVsLmZhbWlseT0ic2FucyIsDQogICAgIHZlcnRleC5zaGFwZT0iY2lyY2xlIiwgICNjYW4gYWxzbyB0cnkgInNxdWFyZSIsICJyZWN0YW5nbGUiLCBldGMuIE1vcmUgaW4gaWdyYXBoIG1hbnVhbA0KICAgICB2ZXJ0ZXgubGFiZWwuY29sb3I9aHN2KGg9MCwgcz0wLCB2PS45NSwgYWxwaGE9MC41KSwNCiAgICAgdmVydGV4LmxhYmVsLmNleD0oZGVncmVlKHBsYW5ldGZpdG5lc3MxX3J0X2dyYXBoLCBtb2RlID0gImluIikpLzMwMCwgI3NpemVkIGJ5IGluLWRlZ3JlZSBjZW50cmFsaXR5DQogICAgIGVkZ2UuYXJyb3cuc2l6ZT0wLjgsDQogICAgIGVkZ2UuYXJyb3cud2lkdGg9MC41LA0KICAgICBlZGdlLndpZHRoPWVkZ2VfYXR0cihwbGFuZXRmaXRuZXNzMV9ydF9ncmFwaCkkbi8xMCwgI3NpemVkIGJ5IGVkZ2Ugd2VpZ2h0DQogICAgIGVkZ2UuY29sb3I9aHN2KGg9Ljk1LCBzPTEsIHY9LjcsIGFscGhhPTAuNSkpDQp0aXRsZSgiUGxhbmV0IEZpdG5lc3MxIFJldHdlZXQgTmV0d29yayIsIGNleC5tYWluPTEsIGNvbC5tYWluPSJncmF5OTUiKQ0KDQplY291bnQocGxhbmV0Zml0bmVzczFfcnRfZ3JhcGgpICN0aGUgbnVtYmVyIG9mIGVkZ2VzDQoNCnZjb3VudChwbGFuZXRmaXRuZXNzMV9ydF9ncmFwaCkgI3RoZSBudW1iZXIgb2YgdmVydGljZXMNCg0KZWRnZV9kZW5zaXR5KHBsYW5ldGZpdG5lc3MxX3J0X2dyYXBoLCBsb29wcz1GKQ0KDQpFKHBsYW5ldGZpdG5lc3MxX3J0X2dyYXBoKVsxOjUwXSAjbGlzdCB0aGUgZmlyc3QgNTAgZWRnZXMNCg0KVihwbGFuZXRmaXRuZXNzMV9ydF9ncmFwaClbMTo1MF0gI2xpc3QgdGhlIGZpcnN0IDUwIHZlcnRleCBpZHMNCg0KDQojQ2FsY3VsYXRlIGNlbnRyYWxpemF0aW9uDQpjZW50cl9kZWdyZWUocGxhbmV0Zml0bmVzczFfcnRfZ3JhcGgsIG1vZGUgPSBjKCJpbiIpLCBsb29wcyA9IFRSVUUsbm9ybWFsaXplZCA9IFRSVUUpJGNlbnRyYWxpemF0aW9uDQoNCiNDYWxjdWxhdGUgaW4tZGVncmVlIGNlbnRyYWxpdHkNCmluZGVncmVlMSA8LSBzb3J0KGRlZ3JlZShwbGFuZXRmaXRuZXNzMV9ydF9ncmFwaCxtb2RlID0gImluIiksZGVjcmVhc2luZyA9IFRSVUUpDQppbmRlZ3JlZTFbMToyMF0gI3Nob3cgdGhlIHRvcCB2ZXJ0aWNlcyBieSBpbi1kZWdyZWUgDQoNCm91dGRlZ3JlZTEgPC0gc29ydChkZWdyZWUocGxhbmV0Zml0bmVzczFfcnRfZ3JhcGgsbW9kZSA9ICJvdXQiKSxkZWNyZWFzaW5nID0gVFJVRSkNCm91dGRlZ3JlZTFbMToyMF0gI3Nob3cgdGhlIHRvcCB2ZXJ0aWNlcyBieSBvdXQtZGVncmVlDQoNCmJ0MSA8LSBzb3J0KGJldHdlZW5uZXNzKHBsYW5ldGZpdG5lc3MxX3J0X2dyYXBoLCBkaXJlY3RlZD1GLCB3ZWlnaHRzPU5BKSwgZGVjcmVhc2luZyA9IFRSVUUpDQpidDFbMToyMF0gI3Nob3cgdGhlIHRvcCB2ZXJ0aWNlcyBieSBiZXR3ZWVubmVzcyBjZW50cmFsaXR5IA0KDQpgYGANCg0KQSBmZXcgdGhpbmdzIGNhbiBiZSBvYnNlcnZlZCBmcm9tIHRoZXNlIG5ldHdvcmtzLiBJbiB0aGlzIGNhc2UsIHRoZSBkYXRhIGZvciBMQSBGaXRuZXNzIGluY2x1ZGVkIDQ2IHVzZXJzIGFuZCB0aGUgZGF0YSBmb3IgUGxhbmV0IEZpdG5lcyBpbmNsdWRlZCA0NCB1c2Vycy4gVGh1cywgdGhlIHR3byBoYXNodGFncyBoYXZlIHNpbWlsYXIgbnVtYmVycyBvZiBtZW1iZXJzIGludm9sdmVkIGluIHRoZSBjb21tdW5pdGllcyBhbmQgYSBzaW1pbGFyIG51bWJlciBvZiBjb25uZWN0aW9ucyB3aXRoaW4gdGhvc2UgY29tbXVuaXRpZXMuIEhvdyB0aG9zZSBjb25lbmN0aW9ucyBzdXJmYWNlLCB0aG91Z2gsIGRpZmZlci4gT2JzZXJ2aW5nIHRoZSB2aXN1YWxzIG9mIHRoZSBuZXR3b3JrcywgYSBmZXcgdGhpbmdzIHN0YW5kIG91dC4gVGhlIG5ldHdvcmsgZm9yIExBIEZpdG5lc3MgaW5jbHVkZXMgb25lIG1haW4gY2x1c3RlciBvZiBpbnRlcmFjdGluZyB1c2VycyBhbmQgc2V2ZXJhbCBzbWFsbCBncm91cHMgb2YgaW50ZXJhY3RpbmcgdXNlcnMuIExBIEZpdG5lc3MncyBuZXR3b3JrIGlzIGNsZWFuZXIuIFRoZXJlIGFyZSBsZXNzIGNvbm5lY3Rpb25zIHJ1bm5pbmcgdGhyb3VnaG91dCB0aGUgZ3JvdXAsIHJhdGhlciBtYW55IHVzZXJzIGZvY3VzIG1haW5pbmdseSBhcm91bmQgb25lIHVzZXIuIFBsYW5ldCBGaXRuZXNzJ3MgbmV0d29yayBpcyBhIGJpdCBtZXNzaWVyIHRoYW4gTEEgRml0bmVzcydzLiBUaGlzIG5ldHdvcmsgc2VlbXMgdG8gaGF2ZSBtb3JlIGNvbm5lY3Rpb25zLiBXaGlsZSB0aGVyZSBkbyBzZWVtIHRvIGJlIG9uZSBsYXJnZXIgY2x1c3RlciBhbmQgYSBmZXcgc21hbGxlciBjbHVzdGVycywgdGhlc2UgY2x1c3RlcnMgc2VlbSBsZXNzIGV4Y2x1c2l2ZSBhbmQgY29ubmVjdCB0byBvbmUgYW5vdGhlciBvbiBzZXZlcmFsIGxldmVscy4gVGhlcmUgaXMgbW9yZSBjb25uZWN0aXZpdHkgaW4gUGxhbmV0IEZpdG5lc3MncyBuZXR3b3JrIHRoYW4gTEEgRml0bmVzc2VzJ3MuIFRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlc2UgcGF0dGVybnMgd2UgY2FuIGxvb2sgYXQgc2V2ZXJhbCBmYWN0b3JzLiBGaXJzdGx5LCB3ZSBjYW4gZmluZCBlYWNoIG5ldHdvcmsncyBjZW50cmFsaXphdGlvbi4gSWYgYSBuZXR3b3JrIGlzIGhpZ2hseSBjZW50cmFsaXplZCwgaXQgaXMgbWFpbmx5IGNlbnRlcmVkIGFyb3VuZCBmZXdlciB1c2VycyB3aXRoIG90aGVyIHVzZXJzIGludGVyYWN0aW5nIG1haW5seSB3aXRoIHRob3NlIGZldyB1c2Vycy4gSGlnaCBjZW50cmFsaXphdGlvbiBpbiBhIG5ldHdvcmsgbGVhZHMgdG8gYSBsZXNzIGRlbW9jcmF0aWMsIGVxdWFsIG5ldHdvcmssIGJ1dCBkb2VzIGxlYWQgdG8gYSBtb3JlIGVmZmljaWVudCBuZXR3b3JrLiBJbiB0aGlzIHdheSwgYSBoaWdoZXIgY2VudHJhbGl6YXRpb24gbWlnaHQgYmUgZWFzaWVyIHRvIHRhcmdldCBrZXkgbGVhZGVycyB3aXRoaW4gdGhlIG5ldHdvcmsgZm9yIGdldHRpbmcgb3V0IG1lc3NhZ2VzLCB3aGljaCBtYXkgaW4gdHVybiBiZSBoZWxwZnVsIGZvciBtYXJrZXRpbmcgYmVjYXVzZSB5b3UgY2FuIHNlZSB3aG8gaG9sZCB0aGUgbW9zdCBpbmZsdWVuY2UgaW4gdGhlIG5ldHdvcmtzIGFuZCB3aGF0IHRoZXkgYXJlIHBvc3RpbmcgYWJvdXQuIEEgbG93ZXIgbGV2ZWwgb2YgY2VudHJhbGl6YXRpb24gbWVhbnMgdGhhdCB0aGUgbmV0d29yayBpcyBtb3JlIGRlbW9jcmF0aWMgYW5kIGVxdWFsLCBidXQgaXQgdGVuZHMgdG8gYmUgbWVzc2llciBhbmQgcmVsYXRpdmVseSBsZWFkZXJsZXNzLiBJbiB0aGlzIGNhc2UsIHVwb24gY2FsY3VsYXRpb24sIFBsYW5ldCBGaXRuZXNzIGhhcyBhIG1vcmUgY2VudHJhbGl6ZWQgbmVudHdvcmsgdGhhbiBMQSBGaXRuZXNzLiBQbGFuZXQgRml0bmVzcywgdGhlbiBtaWdodCBmb2N1cyBtb3JlIG9uIGZpbmRpbmcgY2VydGFpbiBwb3B1bGFyIHVzZXJzIHdpdGhpbiB0aGUgZ3JvdXAgd2hvIG1heSBhY3QgYXMgZGVjaXNpb24gbGVhZGVycyBmb3IgdGhlIHJlc3Qgb2YgdGhlIGdyb3VwIHRoZW4gTEEgRml0bmVzcyB3aGVuIGxvb2tpbmcgYXQgaG93IHRvIG1hcmtldCB0byB0aGVpciBjdXJyZW50IGd5bSBnb2VycyBhbmQgaG93IHRvIHN0cmF0ZWdpemUgZm9yIGZ1dHVyZSBzYWxlcy4gDQoNCk9uZSBmYWN0b3Igd2UgY2FuIGxvb2sgYXQgaGVyZSBhcmUgdGhlIG1vc3QgcmV0d2VldGVkIHVzZXJzIGluIHRoZSBuZXR3b3Jrcy4gVGhlIHRvcCByZXR3ZWV0ZWQgdXNlcnMgaW4gdGhlIExBIEZpdG5lc3MgbmV0d29yayBhcmUgZHJlZWRfMTAsIDFmYWNlYnlncmFjZSwgZWhmb3VuZGF0aW9uMjM3LCByYXRoZXJfdW5pcXVlOTEsIGFuZCBvZmZpY2lhbF9tbzUuIEluIFBsYW5ldCBGaXRuZXNzJ3MgbmV0d29yaywgdGhlIHVzZXJzIHdobyBhcmUgdG9wIHJldHdlZXRlZCBhcmUgY29yYWxyYWUyMSwgZGVudGlzdG1lbCwganVwaXRlcmlzdmVsdmV0LCB5ZWxsYWFtYmFhLCBhbmQgYmltYm9vbnRoZWxvb3NlLiBJbiBlaXRoZXIgY2FzZSwgaXQgbWF5IGJlIGJlbmVmaWNpYWwgdG8gb2JzZXJ2ZSB0aGVzZSB1c2VycyB0byBmaW5kIG91dCB3aGF0IHRoZXkgYXJlIHBvc3RpbmcgYW5kIHdoeSBwZW9wbGUgbWF5IGJlIGZvbGxvd2luZyB0aGVpciBpbnB1dC4gSXQgbWF5IGFsc28gYmUgYmVuZmljaWFsIHRoZXNlIGxlYWRlcnMgaW4gYWR2ZXJ0aXNpbmcgYW5kIG1hcmtldGluZy4gVGhlIHRvcCA1IHBhcnRpY2lwYW50cyB3aG8gaGF2ZSByZXR3ZWV0ZWQgb3RoZXJzIHRoZSBtb3N0IGluIExBIEZpdG5lc3NzJ3MgbmV0d29yayBhcmUgZW5jYW50b21hbiwgbWltaWN1cnZhY2VvdXMsIGFvc192YXZpLCBqczIzX18sIGFuZCBiaWdhbjM2LiBUaGUgdG9wIHVzZXJzIHdobyBoYXZlIHJldHdlZXRlZCBvdGhlcnMgdGhlIG1vc3QgaW4gUGxhbmV0IEZpdG5lc3MncyBuZXR3b3JrIGFyZSBtZWxsaXNhc3dpZ2FydCwgZGVhcmx5bmRzZXkwOSwgZ3JlZWtfdG9lcywgYXJiOTEzLCBhbmQganVwaXRlcmlzdmVsdmV0LiBUaGVzZSB1c2VycyBhcmUgY2xlYXJseSBhY3RpdmUgd2l0aGluIHRoZWlyIG5ldG9ya3MgYW5kIGNhbiBiZSBvYnNlcnZlZCB0byBzdHJhdGVnaXplIGZvciB0aGlua2luZyBhYm91dCBlbmdhaW5nIHdpdGggb3RoZXIgc29jaWFsIG1lZGlhIHBhcnRpY2lwYW50cyB0byBnZXQgdGhlIG1vc3QgaW50ZXJhY3Rpb24gd2l0aGluIGdyb3Vwcy4gQW5vdGhlciB0aGluZyB0byBjb25zaWRlciBhcmUgdGhlIG5ldHdvcmtzJyBkZW5zaXRpZXMsIHRoYXQgaXMgdG8gc2F5IHRoZSBleHRlbnQgdG8gd2hpY2ggcGVvcGxlIGluIHRoZSBuZXR3b3JrIGtub3cgZWFjaCBvdGhlci4gTEEgRml0bmVzcyBoYXMgYSBzbGlnaHRseSBoaWdoZXIgZGVuc2l0eSB0aGFuIFBsYW5ldCBGaXRuZXNzLlRoaXMgbGVuZHMgdG8gdGhlIHBvc3NpYmlsaXR5IHRoYXQgTEEgRml0bmVzcydzIG5ldHdvcmsgaW5jbHVkZXMgbW9yZSBwZW9wbGUgdGhhdCBhcmUgY29uZW5jdGVkIHRvIG9uZSBhbm90aGVyLiBUaGlzIG1pZ2h0IHN1Z2dlc3QgdGhhdCBMQSBGaXRuZXNzIGNvdWxkIGdldCBtb3JlIHBlb3BsZSBieSBhZHZlcnRpc2luZyBvdXRzaWRlIG9mIHRoZWlyIG5ldHdvcmsgb3IgbWlnaHQga2VlcCBtb3JlIGludGVybmFsIG1lbWJlcnMgYnkgc3ByZWFkaW5nIG1lc3NhZ2VzIGluc2lkZSBvZiB0aGUgZ3JvdXAuIA0KDQpGcm9tIGEgYnVzaW5lc3MgcGVyc3BlY3RpdmUsIExBIEZpdG5lc3MgYW5kIFBsYW5ldCBGaXRuZXNzIHNoYXJlIHNpbWlsYXIgbmV0d29ya3Mgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgVHdpdHRlciBoYXNodGFncy4gTEEgRml0bmVzcyBpcyByZWxhdGl2ZWx5IGNlbnRyYWxpemVkIGFuZCBpbmNsdWRlcyBvbmUgbWFpbiBjbHVzdGVyIHdpdGggc2VydmVyYWwgc21hbGwgZ3JvdXBzIG91dHNpZGUgb2YgdGhhdCBjbHVzdGVyLiBBZGRpdGlvbmFsbHksIHBlb3BsZSB3aXRoaW4gdGhpcyBuZXR3b3JrIHRlbmQgdG8gYmUgY29ubmVjdGVkIHRvIGVhY2ggb3RoZXIgbW9yZSBjbG9zZWx5LiBQbGFuZXQgRml0bmVzcyBpcyBhbHNvIGEgcmVsYXRpdmVseSBjZW50cmFsaXplZCBuZXR3b3JrLCBtb3Jlc28gdGhhbiBMQSBGaXRuZXNzLCBidXQgaW5jbHVkZXMgbW9yZSBicmlkZ2VzIGJldHdlZW4gdXNlcnMsIG1lYW5pbmcgdGhhdCB0aGUgdXNlcnMgYXJlIGNvbm5lY3RlZCB0byBvbmUgYW5vdGhlciBtb3JlIHdpZGVseSBhbmQgd2l0aCBtb3JlIGNvbm5lY3Rpb25zLkJ5IGxvb2tpbmcgYXQgdGhlc2UgZmFjdG9ycyBhbmQgYnkgbG9va2luZyBhdCB0aGUgdG9wIGNvbm5lY3RpbmcgYW5kIGNvbm5lY3RlZCB3aXRoIHVzZXJzIGluIHRoZSBuZXR3b3Jrcywgd2UgY2FuIG9ic2VydmUgaG93IHRoZSBuZXR3b3JrcyBmb3IgdGhlc2UgZ3ltIGNoYWlucyBhcmUgc2ltaWxhciBhbmQgaG93IHBlcmhhcHMgdGhlIHN0cnVjdHVyZSBvZiB0aGVzZSB0d28gZGlmZmVyZW50IGJ1c2llbnNzZXMgZWZmZWN0IGhvdyB0aGVpciBhdWRpZW5jZSdzIGludGVyYWN0LiBQbGFuZXQgRml0bmVzcyBpcyBhIGxhcmdlIGNoYWluIHdobyBmb2N1c2VzIG9uIGluY2x1c2lvbiBhbmQgY29udmllbmNuY2UgYnV0IGxlc3Mgb24gYW1lbnRpdGllcyBhbmQgaGlnaGVyIHByaWNpbmcgdGhhbiBMQSBGaXRuZXNzLiBQbGFuZXQgRml0bmVzcydzIG5ldHdvcmsgaW5jbHVkZXMgbW9yZSBicmlkZ2VzIGFuZCBjb25uZWN0aW9ucyB0aGFuIExBIEZpdG5lc3MsIHdoaWNoIGxlbmRzIGl0c2VsZiB0byBQTGFuZXQgRml0bmVzcydzIGxhcmdlciBzcGFuIG9mIGF1ZGllbmNlLiBMQSBGaXRuZXNzIHRlbmRzIHRvIGJlIG1vcmUgaGlnaC1lbmQgdGhhbiBQbGFuZXQgRml0bmVzcyBhbmQgZm9jdXNlcyBvbiBvZmZlcmluZyBtYW55IGFtZW50aWVzLiBMQSBGaXRuZXNzJ3MgbmV0d29yayBpcyBtb3JlIGNsdXN0ZXJlZCBhbmQgbGVzcyBjb25uZWN0ZWQgd2l0aCBvdXRzaWRlcnMgb3V0c2lkZSBvZiB0aGUgaW1tZWRpYXRlIHBvcGxhcml0eSBvZiB0aGUgbmV0d29yay4gRnJvbSBhIG1hcmtldGluZyBwZXJzcGVjdGl2ZSwgUGxhbmV0IEZpdG5lc3MgbWF5IHdhbnQgdG8gZm9jdXMgb24gdGhlIGJyaWRnZXMgYXMgcG9zc2liaWxpdGVzIGZvciBnZXR0aW5nIHRoZSB3b3JkIG91dCB0byB3aWRlciBhdWRpZW5jZXMgYW5kIHRodXMgZ2V0IG1vcmUgc2FsZXMgaW4gcXVpY2sgdGltZS4gTEEgZml0bmVzcyBtYXkgd2FudCB0byBmb2N1cyBvbiB0aGUgbWFpbiBkZWNpc2lvbiBsZWFkZXJzIGluIHRoZWlyIGNsdXN0ZXJzIHRvIGRldGVybWluZSB3aGF0IHBlb3BsZSBhcmUgdGFsa2luZyBhYm91dCB0byByZWxheSB0aGF0IGludG8ga2VlcGluZyB0aGVpciBjdXJyZW50IG1lbWJlcnMgYW5kIG5ldHdvcmsuIEFkZGl0aW9uYWxseSwgdGhlIHR3byBjaGFpbnMgY291bGQgbGVhcm4gZnJvbSBvbmUgYW5vdGhlcidzIG5ldHdvcmtzIHRvIGV4cGFuZCB0aGVpciBjb21hcG5pZXMgaW4gdGhlIHdheXMgdGhhdCB0aGUgb3RoZXIgZG9lcy4gDQoNCg==