REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 196.32 KB
Close
//lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc
Text
Base64
Mw0NCsQbdmjrgQMA4wAAAAAAAAAAAAAAAH8AAABAAAAAc5oLAABkAFoAZAFaAWQCWgJkA1oDZARkBWwEWgRkBGQGbAVtBloHAQBkBGQFbAhaCGQEZAVsCVoJZARkBWwKWgpkBGQFbAtaC2QEZAVsDFoMZARkBWwNWg1kBGQFbA5aDmQEZAVsD1oPZARkBWwQWhBkBGQHbBFtEVoRAQB5EGQEZAhsEm0TWhMBAFcAbiAEAGUUawpyqAEAAQABAGQEZAhsFW0TWhMBAFkAbgJYAHkQZARkCWwNbRZaFwEAVwBuPgQAZRRrCnL4AQABAAEAeRBkBGQJbBhtFloXAQBXAG4YBABlFGsKcvIBAAEAAQBkBVoXWQBuAlgAWQBuAlgAZApkC2QMZA1kDmQPZBBkEWQSZBNkFGQVZBZkF2QYZBlkGmQbZBxkHWQeZB9kIGQhZCJkI2QkZCVkJmQnZChkKWQqZCtkLGQtZC5kL2QwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZDpkO2Q8ZD1kPmQ/ZEBkQWRCZENkRGRFZEZkR2RIZElkSmRLZExkTWROZE9kUGRRZFJkU2RUZFVkVmRXZFhkWWRaZFtkXGRdZF5kX2RgZGFkYmRjZGRkZWRmZGdkaGRpZGpka2RsZG1kbmRvZHBkcWRyZ2laGWUaZQlqG4MBZAVkc4UCGQBaHGUcZAQZAGRzawJaHWUdkAJyImUJah5aH2UgWiFlIlojZSBaJGUlZSZlJ2UoZSllGmUqZStlLGUtZS5nC1ovbmJlCWowWh9lMVoyZHRkdYQAWiRnAFovZARkBWwzWjN4QmR2ajSDAEQAXTZaNXkUZS9qNmU3ZTNlNYMCgwEBAFcAbhoEAGU4awqQAnJ8AQABAAEAkAJ3SlkAbgJYAJACcUpXAGU5ZHdkeIQAZTJkeYMBRACDAYMBWjpkemR7hABaO0cAZHxkfYQAZH1lPIMDWj1lBGo+ZQRqPxcAWkBkflpBZUFkfxcAWkJlQGVBFwBaQ2UiZICDAVpEZIFqRWSCZHiEAGUEakZEAIMBgwFaR0cAZINkIYQAZCFlSIMDWklHAGSEZCOEAGQjZUmDA1pKRwBkhWQlhABkJWVJgwNaS0cAZIZkJ4QAZCdlS4MDWkxHAGSHZCqEAGQqZUiDA1pNRwBkiGSJhABkiWU8gwNaTkcAZIpkJoQAZCZlPIMDWk9lDWpQalFlT4MBAQBki2Q9hABaUmSMZE6EAFpTZI1kS4QAWlRkjmSPhABaVWSQZJGEAFpWZJJkk4QAWldklGRVhABaWJABZC9klmSXhAFaWUcAZJhkKIQAZChlPIMDWlpHAGSZZDCEAGQwZVqDA1pbRwBkmmQRhABkEWVbgwNaXEcAZJtkG4QAZBtlW4MDWl1HAGScZBmEAGQZZVuDA1peZV5aX2VeZVpfYEcAZJ1kFoQAZBZlW4MDWmFHAGSeZAyEAGQMZV6DA1piRwBkn2QLhABkC2VhgwNaY0cAZKBkcIQAZHBlW4MDWmRHAGShZDOEAGQzZVuDA1plRwBkomQrhABkK2VbgwNaZkcAZKNkKYQAZCllW4MDWmdHAGSkZA2EAGQNZVuDA1poRwBkpWQyhABkMmVbgwNaaUcAZKZkp4QAZKdlW4MDWmpHAGSoZBSEAGQUZWqDA1prRwBkqWQYhABkGGVqgwNabEcAZKpkF4QAZBdlaoMDWm1HAGSrZC6EAGQuZWqDA1puRwBkrGQthABkLWVqgwNab0cAZK1kNYQAZDVlaoMDWnBHAGSuZDSEAGQ0ZWqDA1pxRwBkr2QkhABkJGVagwNackcAZLBkCoQAZAplcoMDWnNHAGSxZCCEAGQgZXKDA1p0RwBksmQahABkGmVygwNadUcAZLNkEIQAZBBlcoMDWnZHAGS0ZCKEAGQiZVqDA1p3RwBktWQShABkEmV3gwNaeEcAZLZkHIQAZBxld4MDWnlHAGS3ZLiEAGS4ZXeDA1p6RwBkuWQdhABkHWV6gwNae0cAZLpkNoQAZDZleoMDWnxHAGS7ZLyEAGS8ZTyDA1p9ZX2DAFp+RwBkvWQfhABkH2V3gwNaf0cAZL5kLIQAZCxld4MDWoBHAGS/ZBOEAGQTZXeDA1qBRwBkwGTBhABkwWWBgwNagkcAZMJkMYQAZDFld4MDWoNHAGTDZA6EAGQOZYODA1qERwBkxGQVhABkFWWDgwNahUcAZMVkD4QAZA9lg4MDWoZHAGTGZC+EAGQvZYODA1qHRwBkx2QehABkHmU8gwNaiGTIZGaEAFqJkAFkMGTLZESEAVqKkAFkMWTMZECEAVqLZM1kzoQAWoxkz2RThABajWTQZFKEAFqOZNFk0oQAWo+QAWQyZNRkV4QBWpBk1WRFhABakZABZDNk1mRrhAFakmTXZGyEAFqTZNhkboQAWpRlXIMAapVkR4MBWpZlbIMAapVkTYMBWpdlbYMAapVkTIMBWphlboMAapVkZYMBWpllb4MAapVkZIMBWpplZWVEZNlklWTajQNqm2TbZNyEAIMBWpxlZmTdgwFqm2TeZNyEAIMBWp1lZmTfgwFqm2TgZNyEAIMBWp5lnGWdQgBlnkIAZWVlR2ThZHlk4o0DQgBlZmTjZQtqn4MCQgBaoGWFZaBlh2TkgwEXAGWgFwCDAVqhZV5k5YMBZX9k5oMBaqJk54MBFwBlhWV7ZaFloEIAgwGDAWqiZOiDARcAZOkXAFqjZOpkY4QAWqRk62RRhABapWTsZGCEAFqmZO1kXoQAWqdk7mRxhABaqGWoZO9k3IQAgwFaqWWoZPBk3IQAgwFaqmTxZPKEAFqrZPNkT4QAWqxk9GRQhABarWT1ZGmEAFquZTyDAGWuX6+QAWQ0ZPZkb4QBWrBlPYMAWrFlPIMAZbFfsmU8gwBlsV+zZYdk94MBZYdk+IMBZgJk+WRthAFatGW0WrVlhGVmZPqDAWT7FwCDAWqVZPyDAVq2ZYRlZmT9gwFk/hcAgwFqlWT/gwFat2WEZWZk+oMBZPsXAGVmZP2DAWT+FwBCAIMBapWQAWQAgwFauGWEZV+QAWQBgwFluGoIgwAXAIMBapWQAWQCgwFauWT3ZPhkBWW4agiDAGYEkAFkA2RUhAFaupABZDWQAWQEZGqEAVq7ZaSQAWQFgwFavGWkkAFkBoMBWr1lrGVlZUBlQ5ABZAcXAIMCapWQAWQIgwGDAVwCWr5av2XAZcGQAWQJajSDAJABZAqDAoMBWsJlZpABZAuQAWQMakVlwmrDgwCDARcAkAFkDRcAgwFqlZABZA6DAVrEkAFkD2RfhABaxWWEZWaQAWQQgwGQAWQRFwCDAWqVkAFkEoMBWsZlZpABZBODAWqVkAFkFIMBWsdlZpABZBWDAWrIgwBqlZABZBaDAVrJZWaQAWQXgwFqlZABZBiDAVrKZYRlZpABZBCDAZABZBEXAGXKQgCDAWqVkAFkGYMBWstly1rMZWaQAWQagwFqlZABZBuDAVrNZYRle2VlZUdkyZABZByNAmV/ZWWQAWQdgwFlXmTJgwEPABcAZW2DAA8AFwCDARcAgwGDAWrOgwBqlZABZB6DAVrPZYplf2W4agiDAGXPQgBkgZABZB+NAoMBapVkPoMBWtBHAJABZCBkcoQAZHKDAlrRZdKQAWQhawKQC3KWZWKQAWQigwFa02VikAFkI4MBWtRlZWVAZUOQAWQkFwCDAlrVZYpl1ZABZCVk05ABZCaNA2qbZamDAVrWZYVlimXWgwGDAWqVkAFkJ4MBWteQAWQoZddCAFrYZYpl1ZABZCVk05ABZCaNA2qbZamDAVrZZYVlimXZgwGDAWqVkAFkKYMBWtpl05ABZCqDAWXYkAFkJ4MBFwBl1BcAZdqQAWQpgwEXAFrbZdtq3JABZCuDAQEAZdFq3WrckAFkLIMBAQBl0WreatyQAWQsgwEBAGXRat9q3JABZC2DAQEAZARkBWzgWuBl0WrgaptlqGXgauGDAYMBAQBl0WrgatyQAWQugwEBAGQFUwAoNgEAAGFTBgAACnB5cGFyc2luZyBtb2R1bGUgLSBDbGFzc2VzIGFuZCBtZXRob2RzIHRvIGRlZmluZSBhbmQgZXhlY3V0ZSBwYXJzaW5nIGdyYW1tYXJzCgpUaGUgcHlwYXJzaW5nIG1vZHVsZSBpcyBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBjcmVhdGluZyBhbmQgZXhlY3V0aW5nIHNpbXBsZSBncmFtbWFycywKdnMuIHRoZSB0cmFkaXRpb25hbCBsZXgveWFjYyBhcHByb2FjaCwgb3IgdGhlIHVzZSBvZiByZWd1bGFyIGV4cHJlc3Npb25zLiAgV2l0aCBweXBhcnNpbmcsIHlvdQpkb24ndCBuZWVkIHRvIGxlYXJuIGEgbmV3IHN5bnRheCBmb3IgZGVmaW5pbmcgZ3JhbW1hcnMgb3IgbWF0Y2hpbmcgZXhwcmVzc2lvbnMgLSB0aGUgcGFyc2luZyBtb2R1bGUKcHJvdmlkZXMgYSBsaWJyYXJ5IG9mIGNsYXNzZXMgdGhhdCB5b3UgdXNlIHRvIGNvbnN0cnVjdCB0aGUgZ3JhbW1hciBkaXJlY3RseSBpbiBQeXRob24uCgpIZXJlIGlzIGEgcHJvZ3JhbSB0byBwYXJzZSAiSGVsbG8sIFdvcmxkISIgKG9yIGFueSBncmVldGluZyBvZiB0aGUgZm9ybSAKQ3siPHNhbHV0YXRpb24+LCA8YWRkcmVzc2VlPiEifSksIGJ1aWx0IHVwIHVzaW5nIEx7V29yZH0sIEx7TGl0ZXJhbH0sIGFuZCBMe0FuZH0gZWxlbWVudHMgCihMeycrJzxQYXJzZXJFbGVtZW50Ll9fYWRkX18+fSBvcGVyYXRvciBnaXZlcyBMe0FuZH0gZXhwcmVzc2lvbnMsIHN0cmluZ3MgYXJlIGF1dG8tY29udmVydGVkIHRvCkx7TGl0ZXJhbH0gZXhwcmVzc2lvbnMpOjoKCiAgICBmcm9tIHB5cGFyc2luZyBpbXBvcnQgV29yZCwgYWxwaGFzCgogICAgIyBkZWZpbmUgZ3JhbW1hciBvZiBhIGdyZWV0aW5nCiAgICBncmVldCA9IFdvcmQoYWxwaGFzKSArICIsIiArIFdvcmQoYWxwaGFzKSArICIhIgoKICAgIGhlbGxvID0gIkhlbGxvLCBXb3JsZCEiCiAgICBwcmludCAoaGVsbG8sICItPiIsIGdyZWV0LnBhcnNlU3RyaW5nKGhlbGxvKSkKClRoZSBwcm9ncmFtIG91dHB1dHMgdGhlIGZvbGxvd2luZzo6CgogICAgSGVsbG8sIFdvcmxkISAtPiBbJ0hlbGxvJywgJywnLCAnV29ybGQnLCAnISddCgpUaGUgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBncmFtbWFyIGlzIHF1aXRlIHJlYWRhYmxlLCBvd2luZyB0byB0aGUgc2VsZi1leHBsYW5hdG9yeQpjbGFzcyBuYW1lcywgYW5kIHRoZSB1c2Ugb2YgJysnLCAnfCcgYW5kICdeJyBvcGVyYXRvcnMuCgpUaGUgTHtQYXJzZVJlc3VsdHN9IG9iamVjdCByZXR1cm5lZCBmcm9tIEx7UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZzxQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPn0gY2FuIGJlIGFjY2Vzc2VkIGFzIGEgbmVzdGVkIGxpc3QsIGEgZGljdGlvbmFyeSwgb3IgYW4Kb2JqZWN0IHdpdGggbmFtZWQgYXR0cmlidXRlcy4KClRoZSBweXBhcnNpbmcgbW9kdWxlIGhhbmRsZXMgc29tZSBvZiB0aGUgcHJvYmxlbXMgdGhhdCBhcmUgdHlwaWNhbGx5IHZleGluZyB3aGVuIHdyaXRpbmcgdGV4dCBwYXJzZXJzOgogLSBleHRyYSBvciBtaXNzaW5nIHdoaXRlc3BhY2UgKHRoZSBhYm92ZSBwcm9ncmFtIHdpbGwgYWxzbyBoYW5kbGUgIkhlbGxvLFdvcmxkISIsICJIZWxsbyAgLCAgV29ybGQgICEiLCBldGMuKQogLSBxdW90ZWQgc3RyaW5ncwogLSBlbWJlZGRlZCBjb21tZW50cwp6BjIuMS4xMHoVMDcgT2N0IDIwMTYgMDE6MzEgVVRDeipQYXVsIE1jR3VpcmUgPHB0bWNnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD7pAAAAAE4pAdoDcmVmKQHaCGRhdGV0aW1lKQHaBVJMb2NrKQHaC09yZGVyZWREaWN02gNBbmTaD0Nhc2VsZXNzS2V5d29yZNoPQ2FzZWxlc3NMaXRlcmFs2gpDaGFyc05vdElu2gdDb21iaW5l2gREaWN02gRFYWNo2gVFbXB0edoKRm9sbG93ZWRCedoHRm9yd2FyZNoKR29Ub0NvbHVtbtoFR3JvdXDaB0tleXdvcmTaB0xpbmVFbmTaCUxpbmVTdGFydNoHTGl0ZXJhbNoKTWF0Y2hGaXJzdNoHTm9NYXRjaNoGTm90QW552glPbmVPck1vcmXaCE9ubHlPbmNl2ghPcHRpb25hbNoCT3LaElBhcnNlQmFzZUV4Y2VwdGlvbtoTUGFyc2VFbGVtZW50RW5oYW5jZdoOUGFyc2VFeGNlcHRpb27aD1BhcnNlRXhwcmVzc2lvbtoTUGFyc2VGYXRhbEV4Y2VwdGlvbtoMUGFyc2VSZXN1bHRz2hRQYXJzZVN5bnRheEV4Y2VwdGlvbtoNUGFyc2VyRWxlbWVudNoMUXVvdGVkU3RyaW5n2hlSZWN1cnNpdmVHcmFtbWFyRXhjZXB0aW9u2gVSZWdleNoGU2tpcFRv2glTdHJpbmdFbmTaC1N0cmluZ1N0YXJ02ghTdXBwcmVzc9oFVG9rZW7aDlRva2VuQ29udmVydGVy2gVXaGl0ZdoEV29yZNoHV29yZEVuZNoJV29yZFN0YXJ02gpaZXJvT3JNb3Jl2glhbHBoYW51bXPaBmFscGhhc9oKYWxwaGFzOGJpdNoLYW55Q2xvc2VUYWfaCmFueU9wZW5UYWfaDWNTdHlsZUNvbW1lbnTaA2NvbNoSY29tbWFTZXBhcmF0ZWRMaXN02hBjb21tb25IVE1MRW50aXR52gxjb3VudGVkQXJyYXnaD2NwcFN0eWxlQ29tbWVudNoPZGJsUXVvdGVkU3RyaW5n2g9kYmxTbGFzaENvbW1lbnTaDWRlbGltaXRlZExpc3TaBmRpY3RPZtoOZG93bmNhc2VUb2tlbnPaBWVtcHR52gdoZXhudW1z2gtodG1sQ29tbWVudNoQamF2YVN0eWxlQ29tbWVudNoEbGluZdoHbGluZUVuZNoJbGluZVN0YXJ02gZsaW5lbm/aDG1ha2VIVE1MVGFnc9oLbWFrZVhNTFRhZ3PaDm1hdGNoT25seUF0Q29s2hFtYXRjaFByZXZpb3VzRXhwctoUbWF0Y2hQcmV2aW91c0xpdGVyYWzaCm5lc3RlZEV4cHLaD251bGxEZWJ1Z0FjdGlvbtoEbnVtc9oFb25lT2baB29wQXNzb2PaEm9wZXJhdG9yUHJlY2VkZW5jZdoKcHJpbnRhYmxlc9oIcHVuYzhiaXTaEnB5dGhvblN0eWxlQ29tbWVudNoMcXVvdGVkU3RyaW5n2gxyZW1vdmVRdW90ZXPaEXJlcGxhY2VIVE1MRW50aXR52gtyZXBsYWNlV2l0aNoKcmVzdE9mTGluZdoPc2dsUXVvdGVkU3RyaW5n2gZzcmFuZ2XaCXN0cmluZ0VuZNoLc3RyaW5nU3RhcnTaEHRyYWNlUGFyc2VBY3Rpb27aDXVuaWNvZGVTdHJpbmfaDHVwY2FzZVRva2Vuc9oNd2l0aEF0dHJpYnV0ZdoNaW5kZW50ZWRCbG9ja9oPb3JpZ2luYWxUZXh0Rm9y2gd1bmdyb3Vw2g1pbmZpeE5vdGF0aW9u2gtsb2NhdGVkRXhwctoJd2l0aENsYXNz2gpDbG9zZU1hdGNo2gh0b2tlbk1hcNoQcHlwYXJzaW5nX2NvbW1vbukDAAAAYwEAAAAAAAAAAwAAAAsAAABDAAAAc2AAAAB0AHwAdAGDAnIOfABTAHkIdAJ8AIMBUwAEAHQDawpyWgEAAQABAHQBfACDAWoEdAVqBoMAZAGDAn0BdAdkAoMBfQJ8AmoIZANkBIQAgwEBAHwCagl8AYMBUwBYAGQFUwApBmEVAQAARHJvcC1pbiByZXBsYWNlbWVudCBmb3Igc3RyKG9iaikgdGhhdCB0cmllcyB0byBiZSBVbmljb2RlIGZyaWVuZGx5LiBJdCBmaXJzdCB0cmll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AABlAFoBZABaAmQBWgNkW2QEZAWEAVoEZAJkAmQDZANlBWYFZAZkB4QBWgZkCGQJhABaB2UFZgFkCmQLhAFaCGQMZA2EAFoJZA5kD4QAWgpkEGQRhABaC2QSZBOEAFoMZQxaDWQUZBWEAFoOZBZkF4QAWg9kGGQZhABaEGQaZBuEAFoRZBxkHYQAWhJlE3KcZRBaFGURWhVlEloWbiRlEFoXZRFaGGUSWhlkHmQfhABaFGQgZCGEAFoVZCJkI4QAWhZkJGQlhABaGmQmZCeEAFobZFxkKGQphAFaHGQqZCuEAFodZCxkLYQAWh5kLmQvhABaH2QwZDGEAFogZDJkM4QAWiFkNGQ1hABaImQ2ZDeEAFojZDhkOYQAWiRkOmQ7hABaJWQ8ZD2EAFomZF1kP2RAhAFaJ2RBZEKEAFooZENkRIQAWilkRWRGhABaKmReZEhkSYQBWitkSmRLhABaLGRMZE2EAFotZF9kT2RQhAFaLmRRZFKEAFovZFNkVIQAWjBkVWRWhABaMWRXZFiEAFoyZFlkWoQAWjNkAlMAKWByIgAAAGFJBQAACiAgICBTdHJ1Y3R1cmVkIHBhcnNlIHJlc3VsdHMsIHRvIHByb3ZpZGUgbXVsdGlwbGUgbWVhbnMgb2YgYWNjZXNzIHRvIHRoZSBwYXJzZWQgZGF0YToKICAgICAgIC0gYXMgYSBsaXN0IChDe2xlbihyZXN1bHRzKX0pCiAgICAgICAtIGJ5IGxpc3QgaW5kZXggKEN7cmVzdWx0c1swXSwgcmVzdWx0c1sxXX0sIGV0Yy4pCiAgICAgICAtIGJ5IGF0dHJpYnV0ZSAoQ3tyZXN1bHRzLjxyZXN1bHRzTmFtZT59IC0gc2VlIEx7UGFyc2VyRWxlbWVudC5zZXRSZXN1bHRzTmFtZX0pCgogICAgRXhhbXBsZTo6CiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBkYXRlX3N0ciA9IChpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJ5ZWFyIikgKyAnLycgCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgibW9udGgiKSArICcvJyAKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJkYXkiKSkKICAgICAgICAjIGVxdWl2YWxlbnQgZm9ybToKICAgICAgICAjIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCgogICAgICAgICMgcGFyc2VTdHJpbmcgcmV0dXJucyBhIFBhcnNlUmVzdWx0cyBvYmplY3QKICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpCgogICAgICAgIGRlZiB0ZXN0KHMsIGZuPXJlcHIpOgogICAgICAgICAgICBwcmludCgiJXMgLT4gJXMiICUgKHMsIGZuKGV2YWwocykpKSkKICAgICAgICB0ZXN0KCJsaXN0KHJlc3VsdCkiKQogICAgICAgIHRlc3QoInJlc3VsdFswXSIpCiAgICAgICAgdGVzdCgicmVzdWx0Wydtb250aCddIikKICAgICAgICB0ZXN0KCJyZXN1bHQuZGF5IikKICAgICAgICB0ZXN0KCInbW9udGgnIGluIHJlc3VsdCIpCiAgICAgICAgdGVzdCgiJ21pbnV0ZXMnIGluIHJlc3VsdCIpCiAgICAgICAgdGVzdCgicmVzdWx0LmR1bXAoKSIsIHN0cikKICAgIHByaW50czo6CiAgICAgICAgbGlzdChyZXN1bHQpIC0+IFsnMTk5OScsICcvJywgJzEyJywgJy8nLCAnMzEnXQogICAgICAgIHJlc3VsdFswXSAtPiAnMTk5OScKICAgICAgICByZXN1bHRbJ21vbnRoJ10gLT4gJzEyJwogICAgICAgIHJlc3VsdC5kYXkgLT4gJzMxJwogICAgICAgICdtb250aCcgaW4gcmVzdWx0IC0+IFRydWUKICAgICAgICAnbWludXRlcycgaW4gcmVzdWx0IC0+IEZhbHNlCiAgICAgICAgcmVzdWx0LmR1bXAoKSAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KICAgICAgICAtIGRheTogMzEKICAgICAgICAtIG1vbnRoOiAxMgogICAgICAgIC0geWVhcjogMTk5OQogICAgTlRjBQAAAAAAAAAGAAAAAwAAAEMA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bHRzIGFzIGEgbmVzdGVkIGRpY3Rpb25hcnkuCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJkYXkiKQogICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0ID0gZGF0ZV9zdHIucGFyc2VTdHJpbmcoJzEyLzMxLzE5OTknKQogICAgICAgICAgICBwcmludCh0eXBlKHJlc3VsdCksIHJlcHIocmVzdWx0KSkgIyAtPiA8Y2xhc3MgJ3B5cGFyc2luZy5QYXJzZVJlc3VsdHMnPiAoWycxMicsICcvJywgJzMxJywgJy8nLCAnMTk5OSddLCB7J2RheSc6IFsoJzE5OTknLCA0KV0sICd5ZWFyJzogWygnMTInLCAwKV0sICdtb250aCc6IFsoJzMxJywgMildfSkKICAgICAgICAgICAgCiAgICAgICAgICAgIHJlc3VsdF9kaWN0ID0gcmVzdWx0LmFzRGljdCgpCiAgICAgICAgICAgIHByaW50KHR5cGUocmVzdWx0X2RpY3QpLCByZXByKHJlc3VsdF9kaWN0KSkgIyAtPiA8Y2xhc3MgJ2RpY3QnPiB7J2RheSc6ICcxOTk5JywgJ3llYXInOiAnMTInLCAnbW9udGgnOiAnMzEnfQoKICAgICAgICAgICAgIyBldmVuIHRob3VnaCBhIFBhcnNlUmVzdWx0cyBzdXBwb3J0cyBkaWN0LWxpa2UgYWNjZXNzLCBzb21ldGltZSB5b3UganVzdCBuZWVkIHRvIGhhdmUgYSBkaWN0CiAgICAgICAgICAgIGltcG9ydCBqc29uCiAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0KSkgIyAtPiBFeGNlcHRpb246IFR5cGVFcnJvcjogLi4uIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZQogICAgICAgICAgICBwcmludChqc29uLmR1bXBzKHJlc3VsdC5hc0RpY3QoKSkpICMgLT4geyJtb250aCI6ICIzMSIsICJkYXkiOiAiMTk5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ZgYWAIMBAQBx4nwEagBkCHwBZAV8AhQAfAl8AWQFfAJkBhcAFAB0AXwKgwFmBhYAgwEBAHHiVwBkCWoMfASDAVMAKQphSAIAAAogICAgICAgIERpYWdub3N0aWMgbWV0aG9kIGZvciBsaXN0aW5nIG91dCB0aGUgY29udGVudHMgb2YgYSBDe1BhcnNlUmVzdWx0c30uCiAgICAgICAgQWNjZXB0cyBhbiBvcHRpb25hbCBDe2luZGVudH0gYXJndW1lbnQgc28gdGhhdCB0aGlzIHN0cmluZyBjYW4gYmUgZW1iZWRkZWQKICAgICAgICBpbiBhIG5lc3RlZCBkaXNwbGF5IG9mIG90aGVyIGRhdGEuCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJkYXkiKQogICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0ID0gZGF0ZV9zdHIucGFyc2VTdHJpbmcoJzEyLzMxLzE5OTknKQogICAgICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIHByaW50czo6CiAgICAgICAgICAgIFsnMTInLCAnLycsICczMScsICcvJywgJzE5OTknXQogICAgICAgICAgICAtIGRheTogMTk5OQogICAgICAgICAgICAtIG1vbnRoOiAzMQogICAgICAgICAgICAtIHllYXI6IDEyCiAgICAgICAgchEBAABjAQAAAAAAAAADAAAAAwAAAHMAAABzHgAAAHwAXRZcAn0BfQJ0AHwBgwF8AmYCVgABAHECZABTACkBTikBcnsAAAApA3KFAAAActUAAABy0AAAAHJ3AAAAcncAAAByeAAAAHKHAAAAZwMAAHMCAAAABAB6JFBhcnNlUmVzdWx0cy5kdW1wLjxsb2NhbHM+LjxnZW5leHByPnoKJXMlcy0gJXM6IHoCICBycgAAAGMBAAAAAAAAAAIAAAAEAAAAcwAAAHMYAAAAfABdEH0BdAB8AXQBgwJWAAEAcQJkAFMAKQFOKQJyegAAAHIiAAAA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Y2Vzcy4gIFNlZSBMe0l7UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ308UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uCiAgIG9uIHBhcnNpbmcgc3RyaW5ncyBjb250YWluaW5nIEN7PFRBQj59cywgYW5kIHN1Z2dlc3RlZCBtZXRob2RzIHRvIG1haW50YWluIGEKICAgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBwYXJzZWQgc3RyaW5nLCB0aGUgcGFyc2UgbG9jYXRpb24sIGFuZCBsaW5lIGFuZCBjb2x1bW4KICAgcG9zaXRpb25zIHdpdGhpbiB0aGUgcGFyc2VkIHN0cmluZy4KICAgcgEAAABycgAAAHIRAQAAKQJy2AAAANoFcmZpbmQpA3KZAAAA2gRzdHJncooAAABydwAAAHJ3AAAAcngAAAByOQAAALEDAABzBAAAAAAKBAFjAgAAAAAAAAACAAAABAAAAEMAAABzEgAAAHwBagBkAWQCfACDA2QDFwBTACkEYQcCAABSZXR1cm5zIGN1cnJlbnQgbGluZSBudW1iZXIgd2l0aGluIGEgc3RyaW5nLCBjb3VudGluZyBuZXdsaW5lcyBhcyBsaW5lIHNlcGFyYXRvcnMuCiAgIFRoZSBmaXJzdCBsaW5lIGlzIG51bWJlciAxLgoKICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBiZWhhdmlvciBpcyB0byBleHBhbmQgdGFicyBpbiB0aGUgaW5wdXQgc3RyaW5nCiAgIGJlZm9yZSBzdGFydGluZyB0aGUgcGFyc2luZyBwcm9jZXNzLiAgU2VlIEx7SXtQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nfTxQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPn0gZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgb24gcGFyc2luZyBzdHJpbmdzIGNvbnRhaW5pbmcgQ3s8VEFCPn1zLCBhbmQgc3VnZ2VzdGVkIG1ldGhvZHMgdG8gbWFpbnRhaW4gYQogICBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHBhcnNlZCBzdHJpbmcsIHRoZSBwYXJzZSBsb2NhdGlvbiwgYW5kIGxpbmUgYW5kIGNvbHVt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AABzKgAAAAABCAEMAQYBBgMQAQoFDAUGAQYFBAMOARQCFhgEAQIBBgESAQ4BDgEGAnJNAQAAYwAAAAAAAAAAAAAAAAUAAAAAAAAAc5ICAABlAFoBZABaAmQBWgNkAloEZANaBWUGZARkBYQAgwFaB2UGZAZkB4QAgwFaCGSGZAhkCYQBWglkCmQLhABaCmQMZA2EAFoLZIdkDmQPhAFaDGSIZBFkEoQBWg1kE2QUhABaDmQVZBaEAFoPZBdkGIQAWhBkGWQahABaEWQbZByEAFoSZB1kHoQAWhNkiWQfZCCEAVoUZCFkIoQAWhVkimQjZCSEAVoWZCVkJoQAWhdkJ2QohABaGEcAZClkKoQAZCplGYMDWhplG2Qrawly4EcAZCxkLYQAZC1lGYMDWhxuEEcAZC5kLYQAZC1lGYMDWhxpAFodZR6DAFofZC9kL2cCWiBki2QwZDGEAVohZRZaImUGZDJkM4QAgwFaI2QDWiRlBmSMZDVkNoQBgwFaJWSNZDdkOIQBWiZlJ2QDZgJkOWQ6hAFaKGQ7ZDyEAFopZSdmAWQ9ZD6EAVoqZSdkA2YCZD9kQIQBWitkQWRChABaLGRDZESEAFotZEVkRoQAWi5kR2RIhABaL2RJZEqEAFowZEtkTIQAWjFkTWROhABaMmRPZFCEAFozZFFkUoQAWjRkU2RUhABaNWRVZFaEAFo2ZFdkWIQAWjdkWWRahABaOGSOZFtkXIQBWjlkXWRehABaOmRfZGCEAFo7ZGFkYoQAWjxkY2RkhABaPWRlZGaEAFo+ZGdkaIQAWj9kj2RpZGqEAVpAZGtkbIQAWkFkbWRuhABaQmRvZHCEAFpDZHFkcoQAWkRnAGYBZHNkdIQBWkVkkGR1ZHaEAVpGhwBmAWR3ZHiECFpHZHlkeoQAWkhke2R8hABaSWR9ZH6EAFpKZH9kgIQAWktkkWSBZIKEAVpMZJJkhGSFhAFaTYcABABaTlMAKZNyJAAAAHopQWJzdHJhY3QgYmFzZSBsZXZlbCBwYXJzZXIgZWxlbWVudCBjbGFzcy56BCAKCQ1GYwEAAAAAAAAAAQAAAAIAAABDAAAAcwoAAAB8AHQAXwFkAVMAKQJh0QEAAAogICAgICAgIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCB3aGl0ZXNwYWNlIGNoYXJzCgogICAgICAgIEV4YW1w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IGNhbGxlZCBhcyBDe2ZuKHMsbG9jLHRva3MpfSwKICAgICAgICBDe2ZuKGxvYyx0b2tzKX0sIEN7Zm4odG9rcyl9LCBvciBqdXN0IEN7Zm4oKX0sIHdoZXJlOgogICAgICAgICAtIHMgICA9IHRoZSBvcmlnaW5hbCBzdHJpbmcgYmVpbmcgcGFyc2VkIChzZWUgbm90ZSBiZWxvdykKICAgICAgICAgLSBsb2MgPSB0aGUgbG9jYXRpb24gb2YgdGhlIG1hdGNoaW5nIHN1YnN0cmluZwogICAgICAgICAtIHRva3MgPSBhIGxpc3Qgb2YgdGhlIG1hdGNoZWQgdG9rZW5zLCBwYWNrYWdlZCBhcyBhIEN7THtQYXJzZVJlc3VsdHN9fSBvYmplY3QKICAgICAgICBJZiB0aGUgZnVuY3Rpb25zIGluIGZucyBtb2RpZnkgdGhlIHRva2VucywgdGhleSBjYW4gcmV0dXJuIHRoZW0gYXMgdGhlIHJldHVybgogICAgICAgIHZhbHVlIGZyb20gZm4sIGFuZCB0aGUgbW9kaWZpZWQgbGlzdCBvZiB0b2tlbnMgd2lsbCByZXBsYWNlIHRoZSBvcmlnaW5hbC4KICAgICAgICBPdGhlcndpc2UsIGZuIGRvZXMgbm90IG5lZWQgdG8gcmV0dXJuIGFueSB2YWx1ZS4KCiAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHM6CiAgICAgICAgIC0gY2FsbER1cmluZ1RyeSA9IChkZWZhdWx0PUN7RmFsc2V9KSBpbmRpY2F0ZSBpZiBwYXJzZSBhY3Rpb24gc2hvdWxkIGJlIHJ1biBkdXJpbmcgbG9va2FoZWFkcyBhbmQgYWx0ZXJuYXRlIHRlc3RpbmcKCiAgICAgICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBiZWhhdmlvciBpcyB0byBleHBhbmQgdGFicyBpbiB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgTHtJe3BhcnNlU3RyaW5nfTxwYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uCiAgICAgICAgb24gcGFyc2luZyBzdHJpbmdzIGNvbnRhaW5pbmcgQ3s8VEFCPn1zLCBhbmQgc3VnZ2VzdGVkIG1ldGhvZHMgdG8gbWFpbnRhaW4gYQogICAgICAgIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgcGFyc2VkIHN0cmluZywgdGhlIHBhcnNlIGxvY2F0aW9uLCBhbmQgbGluZSBhbmQgY29sdW1uCiAgICAgICAgcG9zaXRpb25zIHdpdGhpbiB0aGUgcGFyc2VkIHN0cmluZy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyICsgJy8nICsgaW50ZWdlciArICcvJyArIGludGVnZXIKCiAgICAgICAgICAgIGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikgICMgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCgogICAgICAgICAgICAjIHVzZSBwYXJzZSBhY3Rpb24gdG8gY29udmVydCB0byBpbnRzIGF0IHBhcnNlIHRpbWUKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IGludCh0b2tzWzBdKSkKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyICsgJy8nICsgaW50ZWdlciArICcvJyArIGludGVnZXIKCiAgICAgICAgICAgICMgbm90ZSB0aGF0IGludGVnZXIgZmllbGRzIGFyZSBub3cgaW50cywgbm90IHN0cmluZ3MKICAgICAgICAgICAgZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBbMTk5OSwgJy8nLCAxMiwgJy8nLCAzMV0KICAgICAgICByZgEAAEYpBnLGAAAA2gNtYXByTQEAAHJTAQAActMAAAByZgEAACkDcp4AAADaA2Zuc3L1AAAAcncAAABydwAAAHJ4AAAAcoAAAADLBAAAcwYAAAAAIhQBDgF6HFBhcnNlckVsZW1lbnQuc2V0UGFyc2VBY3Rpb25jAQAAAAAAAAADAAAABwAAAE8AAABzNAAAAHwABABqAHQBdAJ0A3QBfAGDAYMCgwE3AAIAXwB8AGoEcCx8AmoFZAFkAoMCfABfBHwAUwApA3qmCiAgICAgICAgQWRkIHBhcnNlIGFjdGlvbiB0byBleHByZXNzaW9uJ3MgbGlzdCBvZiBwYXJzZSBhY3Rpb25zLiBTZWUgTHtJe3NldFBhcnNlQWN0aW9ufTxzZXRQYXJzZUFjdGlvbj59LgogICAgICAgIAogICAgICAgIFNlZSBleGFtcGxlcyBpbiBMe0l7Y29weX08Y29weT59LgogICAgICAgIHJmAQAARikGclMBAAByxgAAAHJ2AQAAck0BAAByZgEAAHLTAAAAKQNyngAAAHJ3AQAAcvUAAABydwAAAHJ3AAAAcngAAADaDmFkZFBhcnNlQWN0aW9u8QQAAHMGAAAAAAYcARQBehxQYXJzZXJFbGVtZW50LmFkZFBhcnNlQWN0aW9uYwEAAAAAAAAABAAAAAQAAAAPAAAAc2IAAAB8AmoAZAFkAoMCiQJ8AmoAZANkBIMCchx0AW4CdAKJAHgofAFEAF0giQGHAIcBhwJmA2QFZAaECH0DfABqA2oEfAODAQEAcSZXAHwAagVwWnwCagBkB2QEgwJ8AF8FfABTACkIYdMDAABBZGQgYSBib29sZWFuIHByZWRpY2F0ZSBmdW5jdGlvbiB0byBleHByZXNzaW9uJ3MgbGlzdCBvZiBwYXJzZSBhY3Rpb25zLiBTZWUgCiAgICAgICAgTHtJe3NldFBhcnNlQWN0aW9ufTxzZXRQYXJzZUFjdGlvbj59IGZvciBmdW5jdGlvbiBjYWxsIHNpZ25hdHVyZXMuIFVubGlrZSBDe3NldFBhcnNlQWN0aW9ufSwgCiAgICAgICAgZnVuY3Rpb25zIHBhc3NlZCB0byBDe2FkZENvbmRpdGlvbn0gbmVlZCB0byByZXR1cm4gYm9vbGVhbiBzdWNjZXNzL2ZhaWwgb2YgdGhlIGNvbmRpdGlvbi4KCiAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHM6CiAgICAgICAgIC0gbWVzc2FnZSA9IGRlZmluZSBhIGN1c3RvbSBtZXNzYWdlIHRvIGJlIHVzZWQgaW4gdGhlIHJhaXNlZCBleGNlcHRpb24KICAgICAgICAgLSBmYXRhbCAgID0gaWYgVHJ1ZSwgd2lsbCByYWlzZSBQYXJzZUZhdGFsRXhjZXB0aW9uIHRvIHN0b3AgcGFyc2luZyBpbW1lZGlhdGVseTsgb3RoZXJ3aXNlIHdpbGwgcmFpc2UgUGFyc2VFeGNlcHRpb24KICAgICAgICAgCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0b2tzOiBpbnQodG9rc1swXSkpCiAgICAgICAgICAgIHllYXJfaW50ID0gaW50ZWdlci5jb3B5KCkKICAgICAgICAgICAgeWVhcl9pbnQuYWRkQ29uZGl0aW9uKGxhbWJkYSB0b2tzOiB0b2tzWzBdID49IDIwMDAsIG1lc3NhZ2U9Ik9ubHkgc3VwcG9ydCB5ZWFycyAyMDAwIGFuZCBsYXRlciIpCiAgICAgICAgICAgIGRhdGVfc3RyID0geWVhcl9pbnQgKyAnLycgKyBpbnRlZ2VyICsgJy8nICsgaW50ZWdlcgoKICAgICAgICAgICAgcmVzdWx0ID0gZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBFeGNlcHRpb246IE9ubHkgc3VwcG9ydCB5ZWFycyAyMDAwIGFuZCBsYXRlciAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCiAgICAgICAg2gdtZXNzYWdleh1mYWlsZWQgdXNlci1kZWZpbmVkIGNvbmRpdGlvbtoFZmF0YWxGYwMAAAAAAAAAAwAAAAUAAAATAAAAcyQAAAB0AHQBiAGDAXwAfAF8AoMDgwFzIIgAfAB8AYgCgwOCAWQAUwApAU4pAnLyAAAAck0BAAApA3KKAAAAcjUBAABydgAAACkD2ghleGNfdHlwZdoCZm5ymgAAAHJ3AAAAcngAAADaAnBhDwUAAHMEAAAAAAEUAXomUGFyc2VyRWxlbWVudC5hZGRDb25kaXRpb24uPGxvY2Fscz4ucGFyZgEAACkGctMAAAByIQAAAHIfAAAAclMBAABy+wAAAHJmAQAAKQRyngAAAHJ3AQAAcvUAAAByfQEAAHJ3AAAAKQNyewEAAHJ8AQAAcpoAAAByeAAAANoMYWRkQ29uZGl0aW9u+wQAAHMOAAAAABEMARQBCgEQAxABFAF6GlBhcnNlckVsZW1lbnQuYWRkQ29uZGl0aW9uYwIAAAAAAAAAAgAAAAIAAABDAAAAcwoAAAB8AXwAXwB8AFMAKQFhCwIAAERlZmluZSBhY3Rpb24gdG8gcGVyZm9ybSBpZiBwYXJzaW5nIGZhaWxzIGF0IHRoaXMgZXhwcmVzc2lvbi4KICAgICAgICAgICBGYWlsIGFjdG9uIGZuIGlzIGEgY2FsbGFibGUgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgYXJndW1lbnRzCiAgICAgICAgICAgQ3tmbihzLGxvYyxleHByLGVycil9IHdoZXJlOgogICAgICAgICAgICAtIHMgPSBzdHJpbmcgYmVpbmcgcGFyc2VkCiAgICAgICAgICAgIC0gbG9jID0gbG9jYXRpb24gd2hlcmUgZXhwcmVzc2lvbiBtYXRjaCB3YXMgYXR0ZW1wdGVkIGFuZCBmYWlsZWQKICAgICAgICAgICAgLSBleHByID0gdGhlIHBhcnNlIGV4cHJlc3Npb24gdGhhdCBmYWlsZWQKICAgICAgICAgICAgLSBlcnIgPSB0aGUgZXhjZXB0aW9uIHRocm93bgogICAgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIG5vIHZhbHVlLiAgSXQgbWF5IHRocm93IEN7THtQYXJzZUZhdGFsRXhjZXB0aW9ufX0KICAgICAgICAgICBpZiBpdCBpcyBkZXNpcmVkIHRvIHN0b3AgcGFyc2luZyBpbW1lZGlhdGVseS4pAXJUAQAAKQJyngAAAHJ8AQAAcncAAABydwAAAHJ4AAAA2g1zZXRGYWlsQWN0aW9uFgUAAHMEAAAAAAoGAXobUGFyc2VyRWxlbWVudC5zZXRGYWlsQWN0aW9uYwMAAAAAAAAABgAAAAwAAABDAAAAc1oAAABkAX0DeFB8A3JUZAJ9A3hCfABqAEQAXTh9BHkeeBh8BGoBfAF8AoMCXAJ9An0FZAF9A3EeVwBXAHEWBAB0AmsKckwBAAEAAQBZAHEWWABxFlcAcQZXAHwCUwApA05URikDcl0BAABydAEAAHIfAAAAKQZyngAAAHItAQAAcpkAAABaCmV4cHJzRm91bmTaAWVaBWR1bW15cncAAABydwAAAHJ4AAAA2g9fc2tpcElnbm9yYWJsZXMjBQAAcxYAAAAAAQQBBgEEAQwBAgECARABDAEOAQ4Beh1QYXJzZXJFbGVtZW50Ll9za2lwSWdub3JhYmxlc2MDAAAAAAAAAAUAAAADAAAAQwAAAHNMAAAAfABqAHISfABqAXwBfAKDAn0CfABqAnJIfABqA30DdAR8AYMBfQR4IHwCfARrAHJGfAF8AhkAfANrBnJGfAJkATcAfQJxKFcAfAJTACkCTnJyAAAAKQVyXQEAAHKBAQAAclgBAAByWQEAAHLYAAAAKQVyngAAAHItAQAAcpkAAABaAnd02ghpbnN0cmxlbnJ3AAAAcncAAAByeAAAANoIcHJlUGFyc2UwBQAAcxAAAAAAAQYBDAIGAQYBCAEWAQwCehZQYXJzZXJFbGVtZW50LnByZVBhcnNlYwQAAAAAAAAABAAAAAIAAABDAAAAcwgAAAB8AmcAZgJTACkBTnJ3AAAAKQRyngAAAHItAQAAcpkAAABybwEAAHJ3AAAAcncAAAByeAAAANoJcGFyc2VJbXBsPAUAAHMCAAAAAAF6F1BhcnNlckVsZW1lbnQucGFyc2VJbXBsYwQAAAAAAAAABAAAAAEAAABDAAAAcwQAAAB8A1MAKQFOcncAAAApBHKeAAAAci0BAABymQAAANoJdG9rZW5saXN0cncAAABydwAAAHJ4AAAA2glwb3N0UGFyc2U/BQAAcwIAAAAAAXoXUGFyc2VyRWxlbWVudC5wb3N0UGFyc2VjBQAAAAAAAAAMAAAAIgAAAEMAAABz1AIAAHwAagB9BXwFcxB8AGoBcux8AGoCZAEZAHIsfABqAmQBGQB8AXwCfACDAwEAfARyRHwAagNyRHwAagR8AXwCgwJ9Bm4EfAJ9BnwGfQd5RHkWfABqBXwBfAZ8A4MDXAJ9An0IVwBuKAQAdAZrCnKMAQABAAEAdAd8AXQIfAGDAXwAagl8AIMEggFZAG4CWABXAG5YBAB0CmsKcugBAH0JAQB6PHwAagJkAhkAcsB8AGoCZAIZAHwBfAd8AHwJgwQBAHwAagFy1nwAagF8AXwHfAB8CYMEAQCCAFcAWQBkAGQAfQl+CVgAbgJYAG6OfARv9HwAagOQAXIGfABqBHwBfAKDAn0GbgR8An0GfAZ9B3wAaguQAXMkfAJ0CHwBgwFrBZABcmh5FnwAagV8AXwGfAODA1wCfQJ9CFcAbioEAHQGawqQAXJkAQABAAEAdAd8AXQIfAGDAXwAagl8AIMEggFZAG4CWABuEnwAagV8AXwGfAODA1wCfQJ9CHwAagx8AXwCfAiDA30IdA18CHwAag58AGoPfABqEGQDjQR9CnwAahGQAnKkfAOQAXO0fABqEpACcqR8BZACclZ5UnhMfABqEUQAXUJ9C3wLfAF8B3wKgwN9CHwIZABrCZABcsR0DXwIfABqDnwAag+QAW/6dBN8CHQNdBRmAoMCfABqEGQDjQR9CpABccRXAFcAbkYEAHQKawqQAnJSAQB9CQEAeih8AGoCZAIZAJACckB8AGoCZAIZAHwBfAd8AHwJgwQBAIIAVwBZAGQAZAB9CX4JWABuAlgAbk54THwAahFEAF1CfQt8C3wBfAd8CoMDfQh8CGQAawmQAnJedA18CHwAag58AGoPkAJvlHQTfAh0DXQUZgKDAnwAahBkA40EfQqQAnFeVwB8BZACcsx8AGoCZAQZAJACcsx8AGoCZAQZAHwBfAd8AnwAfAqDBQEAfAJ8CmYCUwApBU5yAQAAAHJxAAAAKQJyvwAAAHLAAAAAcnIAAAApFXJeAQAAclQBAAByYwEAAHJlAQAAcoMBAAByhAEAAHLPAAAAch8AAABy2AAAAHJhAQAAch0AAAByYAEAAHKGAQAAciIAAAByVgEAAHJXAQAAcmIBAAByUwEAAHJmAQAAcnoAAAByxgAAACkMcp4AAAByLQEAAHKZAAAAcm8BAABycAEAAFoJZGVidWdnaW5n2gZwcmVsb2NaC3Rva2Vuc1N0YXJ02gZ0b2tlbnPaA2VycloJcmV0VG9rZW5zcnwBAABydwAAAHJ3AAAAcngAAADaDV9wYXJzZU5vQ2FjaGVDBQAAc3AAAAAAAQYCCgIKARIBCgEOAgQBBAECAQIBFgEOAR4BEAIKARQBBgEQARYCDAEOAgQBBAEWAQIBFgEQARwCEgIOAhYBFgEGAQIBDAEMAQoBBAEEARQBFAESAgwBFAEWAgwBDAEKAQQBBAEUARACBgIMARYCehtQYXJzZXJFbGVtZW50Ll9wYXJzZU5vQ2FjaGVjAwAAAAAAAAADAAAACwAAAEMAAABzPgAAAHkUfABqAHwBfAJkAWQCjQNkAxkAUwAEAHQBawpyOAEAAQABAHQCfAF8AnwAagN8AIMEggFZAG4CWABkAFMAKQRORikBcm8BAAByAQAAACkEcnQBAAByIQAAAHIfAAAAcmEBAAApA3KeAAAAci0BAABymQAAAHJ3AAAAcncAAAByeAAAANoIdHJ5UGFyc2WLBQAAcwgAAAAAAQIBFAEOAXoWUGFyc2VyRWxlbWVudC50cnlQYXJzZWMDAAAAAAAAAAMAAAAMAAAAQwAAAHMyAAAAeRB8AGoAfAF8AoMCAQBXAG4YBAB0AXQCZgJrCnIoAQABAAEAZAFTAFgAZAJTAGQAUwApA05GVCkDcosBAAByHwAAAHLPAAAAKQNyngAAAHItAQAAcpkAAABydwAAAHJ3AAAAcngAAADaDGNhblBhcnNlTmV4dJEFAABzCgAAAAABAgEQARIBBgJ6GlBhcnNlckVsZW1lbnQuY2FuUGFyc2VOZXh0YwAAAAAAAAAAAAAAAAIAAABAAAAAcxQAAABlAFoBZABaAmQBZAKEAFoDZANTACkEeh1QYXJzZXJFbGVtZW50Ll9VbmJvdW5kZWRDYWNoZWMBAAAAAAAAAAQAAAADAAAAAwAAAHNkAAAAaQCJAHQAgwAEAHwAXwGJAYcAhwFmAmQBZAKECH0BhwBmAWQDZASECH0ChwBmAWQFZAaECH0DdAJqA3wBfACDAnwAXwR0AmoDfAJ8AIMCfABfBXQCagN8A3wAgwJ8AF8GZABTACkHTmMCAAAAAAAAAAIAAAADAAAAEwAAAHMMAAAAiABqAHwBiAGDAlMAKQFOKQFy0wAAACkCcp4AAABy+AAAACkC2gVjYWNoZdoMbm90X2luX2NhY2hlcncAAAByeAAAAHLTAAAAngUAAHMCAAAAAAF6M1BhcnNlckVsZW1lbnQuX1VuYm91bmRlZENhY2hlLl9faW5pdF9fLjxsb2NhbHM+LmdldGMDAAAAAAAAAAMAAAADAAAAEwAAAHMMAAAAfAKIAHwBPABkAFMAKQFOcncAAAApA3KeAAAAcvgAAABy4AAAACkBco0BAABydwAAAHJ4AAAA2gNzZXShBQAAcwIAAAAAAXozUGFyc2VyRWxlbWVudC5fVW5ib3VuZGVkQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uc2V0YwEAAAAAAAAAAQAAAAEAAAATAAAAcwwAAACIAGoAgwABAGQAUwApAU4pAXL+AAAAKQFyngAAACkBco0BAABydwAAAHJ4AAAAcv4AAACkBQAAcwIAAAAAAXo1UGFyc2VyRWxlbWVudC5fVW5ib3VuZGVkQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uY2xlYXIpB3K6AAAAco4BAADaBXR5cGVz2gpNZXRob2RUeXBlctMAAAByjwEAAHL+AAAAKQRyngAAAHLTAAAAco8BAABy/gAAAHJ3AAAAKQJyjQEAAHKOAQAAcngAAAByoAAAAJoFAABzEAAAAAABBAEMAg4DDAMMAw4BDgF6JlBhcnNlckVsZW1lbnQuX1VuYm91bmRlZENhY2hlLl9faW5pdF9fTikEcpEAAABykgAAAHKTAAAAcqAAAABydwAAAHJ3AAAAcncAAAByeAAAANoPX1VuYm91bmRlZENhY2hlmQUAAHMCAAAACAFykgEAAE5jAAAAAAAAAAAAAAAAAgAAAEAAAABzFAAAAGUAWgFkAFoCZAFkAoQAWgNkA1MAKQR6GFBhcnNlckVsZW1lbnQuX0ZpZm9DYWNoZWMCAAAAAAAAAAUAAAADAAAAAwAAAHNoAAAAdACDAAQAfABfAYkBdAKDAIkAhwCHAWYCZAFkAoQIfQKHAIcCZgJkA2QEhAh9A4cAZgFkBWQGhAh9BHQDagR8AnwAgwJ8AF8FdANqBHwDfACDAnwAXwZ0A2oEfAR8AIMCfABfB2QAUwApB05jAgAAAAAAAAACAAAAAwAAABMAAABzDAAAAIgAagB8AYgBgwJTACkBTikBctMAAAApAnKeAAAAcvgAAAApAnKNAQAAco4BAABydwAAAHJ4AAAActMAAACyBQAAcwIAAAAAAXouUGFyc2VyRWxlbWVudC5fRmlmb0NhY2hlLl9faW5pdF9fLjxsb2NhbHM+LmdldGMDAAAAAAAAAAMAAAADAAAAEwAAAHMiAAAAfAKIAHwBPAB0AIgAgwGIAWsEch6IAGoBZAGDAQEAZABTACkCTkYpAnLYAAAA2gdwb3BpdGVtKQNyngAAAHL4AAAAcuAAAAApAnKNAQAA2gRzaXplcncAAAByeAAAAHKPAQAAtQUAAHMGAAAAAAEIAQwBei5QYXJzZXJFbGVtZW50Ll9GaWZvQ2FjaGUuX19pbml0X18uPGxvY2Fscz4uc2V0YwEAAAAAAAAAAQAAAAEAAAATAAAAcwwAAACIAGoAgwABAGQAUwApAU4pAXL+AAAAKQFyngAAACkBco0BAABydwAAAHJ4AAAAcv4AAAC6BQAAcwIAAAAAAXowUGFyc2VyRWxlbWVudC5fRmlmb0NhY2hlLl9faW5pdF9fLjxsb2NhbHM+LmNsZWFyKQhyugAAAHKOAQAA2gxfT3JkZXJlZERpY3RykAEAAHKRAQAActMAAAByjwEAAHL+AAAAKQVyngAAAHKUAQAActMAAAByjwEAAHL+AAAAcncAAAApA3KNAQAAco4BAABylAEAAHJ4AAAAcqAAAACtBQAAcxAAAAAAAQwCBgIOAw4FDAMOAQ4BeiFQYXJzZXJFbGVtZW50Ll9GaWZvQ2FjaGUuX19pbml0X19OKQRykQAAAHKSAAAAcpMAAAByoAAAAHJ3AAAAcncAAABydwAAAHJ4AAAA2gpfRmlmb0NhY2hlrAUAAHMCAAAACAFylgEAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHMUAAAAZQBaAWQAWgJkAWQChABaA2QDUwApBHoYUGFyc2VyRWxlbWVudC5fRmlmb0NhY2hlYwIAAAAAAAAABQAAAAMAAAADAAAAc3YAAAB0AIMABAB8AF8BiQJpAIkAdAJqA2cAiAODAokBhwCHAmYCZAFkAoQIfQKHAIcBhwNmA2QDZASECH0DhwCHAWYCZAVkBoQIfQR0BGoFfAJ8AIMCfABfBnQEagV8A3wAgwJ8AF8HdARqBXwEfACDAnwAXwhkAFMAKQdOYwIAAAAAAAAAAgAAAAMAAAATAAAAcwwAAACIAGoAfAGIAYMCUwApAU4pAXLTAAAAKQJyngAAAHL4AAAAKQJyjQEAAHKOAQAAcncAAAByeAAAAHLTAAAAyQUAAHMCAAAAAAF6LlBhcnNlckVsZW1lbnQuX0ZpZm9DYWNoZS5fX2luaXRfXy48bG9jYWxzPi5nZXRjAwAAAAAAAAADAAAAAwAAABMAAABzMgAAAHwCiAB8ATwAdACIAIMBiAJrBHIkiABqAYgBagKDAGQAgwIBAIgBagN8AYMBAQBkAFMAKQFOKQRy2AAAAHL3AAAA2gdwb3BsZWZ0cvsAAAApA3KeAAAAcvgAAABy4AAAACkDco0BAADaCGtleV9maWZvcpQBAABydwAAAHJ4AAAAco8BAADMBQAAcwgAAAAAAQgBDAEQAXouUGFyc2VyRWxlbWVudC5fRmlmb0NhY2hlLl9faW5pdF9fLjxsb2NhbHM+LnNldGMBAAAAAAAAAAEAAAABAAAAEwAAAHMUAAAAiABqAIMAAQCIAWoAgwABAGQAUwApAU4pAXL+AAAAKQFyngAAACkCco0BAABymAEAAHJ3AAAAcngAAABy/gAAANIFAABzBAAAAAABCAF6MFBhcnNlckVsZW1lbnQuX0ZpZm9DYWNoZS5fX2luaXRfXy48bG9jYWxzPi5jbGVhcikJcroAAAByjgEAANoLY29sbGVjdGlvbnPaBWRlcXVlcpABAABykQEAAHLTAAAAco8BAABy/gAAACkFcp4AAABylAEAAHLTAAAAco8BAABy/gAAAHJ3AAAAKQRyjQEAAHKYAQAAco4BAABylAEAAHJ4AAAAcqAAAADDBQAAcxIAAAAAAQwCBAEMAg4DEAYOBA4BDgF6IVBhcnNlckVsZW1lbnQuX0ZpZm9DYWNoZS5fX2luaXRfX04pBHKRAAAAcpIAAABykwAAAHKgAAAAcncAAABydwAAAHJ3AAAAcngAAABylgEAAMIFAABzAgAAAAgBcgEAAABjBQAAAAAAAAALAAAAFwAAAEMAAABz/AAAAGQDXAJ9BX0GfAB8AXwCfAR8A2YFfQd0AGoBj9YBAHQAagJ9CHwIagN8B4MBfQl8CXwIagRrCHK6dABqBXwGBQAZAGQCNwADADwAeRR8AGoGfAF8AnwDfASDBH0JVwBuOAQAdAdrCnKWAQB9CgEAehx8CGoIfAd8CmoJfApqCo4AgwIBAIIAVwBZAGQAZAB9Cn4KWABx7lgAfAhqCHwHfAlkARkAfAlkAhkAaguDAGYCgwIBAHwJUwBuNHQAagV8BQUAGQBkAjcAAwA8AHQMfAl0DYMCctp8CYIBfAlkARkAfAlkAhkAaguDAGYCUwBXAGQAUQBSAFgAZABTACkETnIBAAAAcnIAAAApAnIBAAAAcnIAAAApDnIkAAAA2hJwYWNrcmF0X2NhY2hlX2xvY2vaDXBhY2tyYXRfY2FjaGVy0wAAAHKOAQAA2hNwYWNrcmF0X2NhY2hlX3N0YXRzcooBAAByHQAAAHKPAQAAckgBAABynQAAAHLMAAAAcnoAAABySwEAACkLcp4AAAByLQEAAHKZAAAAcm8BAABycAEAAFoDSElUWgRNSVNT2gZsb29rdXByjQEAAHLgAAAAcqIAAABydwAAAHJ3AAAAcngAAADaC19wYXJzZUNhY2hl4QUAAHMkAAAAAAEIAQ4BCAEGAQoBCgESAQIBFAEQAhQBFAIcAQYCEgEKAQQBehlQYXJzZXJFbGVtZW50Ll9wYXJzZUNhY2hlYwAAAAAAAAAAAAAAAAQAAABDAAAAcygAAAB0AGoBagKDAAEAZAFnAXQDdABqBIMBFAB0AGoEZABkAIUCPABkAFMAKQJOcgEAAAApBXIkAAAAcpwBAABy/gAAAHLYAAAAcp0BAABydwAAAHJ3AAAAcncAAAByeAAAANoKcmVzZXRDYWNoZfoFAABzBAAAAAACCgF6GFBhcnNlckVsZW1lbnQucmVzZXRDYWNoZemAAAAAYwEAAAAAAAAAAQAAAAIAAABDAAAAczgAAAB0AGoBczRkAXQAXwF8AGQCawhyIHQAagKDAHQAXwNuDHQAagR8AIMBdABfA3QAagV0AF8GZAJTACkDYZYFAABFbmFibGVzICJwYWNrcmF0IiBwYXJzaW5nLCB3aGljaCBhZGRzIG1lbW9pemluZyB0byB0aGUgcGFyc2luZyBsb2dpYy4KICAgICAgICAgICBSZXBlYXRlZCBwYXJzZSBhdHRlbXB0cyBhdCB0aGUgc2FtZSBzdHJpbmcgbG9jYXRpb24gKHdoaWNoIGhhcHBlbnMKICAgICAgICAgICBvZnRlbiBpbiBtYW55IGNvbXBsZXggZ3JhbW1hcnMpIGNhbiBpbW1lZGlhdGVseSByZXR1cm4gYSBjYWNoZWQgdmFsdWUsCiAgICAgICAgICAgaW5zdGVhZCBvZiByZS1leGVjdXRpbmcgcGFyc2luZy92YWxpZGF0aW5nIGNvZGUuICBNZW1vaXppbmcgaXMgZG9uZSBvZgogICAgICAgICAgIGJvdGggdmFsaWQgcmVzdWx0cyBhbmQgcGFyc2luZyBleGNlcHRpb25zLgogICAgICAgICAgIAogICAgICAgICAgIFBhcmFtZXRlcnM6CiAgICAgICAgICAgIC0gY2FjaGVfc2l6ZV9saW1pdCAtIChkZWZhdWx0PUN7MTI4fSkgLSBpZiBhbiBpbnRlZ2VyIHZhbHVlIGlzIHByb3ZpZGVkCiAgICAgICAgICAgICAgd2lsbCBsaW1pdCB0aGUgc2l6ZSBvZiB0aGUgcGFja3JhdCBjYWNoZTsgaWYgTm9uZSBpcyBwYXNzZWQsIHRoZW4KICAgICAgICAgICAgICB0aGUgY2FjaGUgc2l6ZSB3aWxsIGJlIHVuYm91bmRlZDsgaWYgMCBpcyBwYXNzZWQsIHRoZSBjYWNoZSB3aWxsCiAgICAgICAgICAgICAgYmUgZWZmZWN0aXZlbHkgZGlzYWJsZWQuCiAgICAgICAgICAgIAogICAgICAgICAgIFRoaXMgc3BlZWR1cCBtYXkgYnJlYWsgZXhpc3RpbmcgcHJvZ3JhbXMgdGhhdCB1c2UgcGFyc2UgYWN0aW9ucyB0aGF0CiAgICAgICAgICAgaGF2ZSBzaWRlLWVmZmVjdHMuICBGb3IgdGhpcyByZWFzb24sIHBhY2tyYXQgcGFyc2luZyBpcyBkaXNhYmxlZCB3aGVuCiAgICAgICAgICAgeW91IGZpcnN0IGltcG9ydCBweXBhcnNpbmcuICBUbyBhY3RpdmF0ZSB0aGUgcGFja3JhdCBmZWF0dXJlLCB5b3VyCiAgICAgICAgICAgcHJvZ3JhbSBtdXN0IGNhbGwgdGhlIGNsYXNzIG1ldGhvZCBDe1BhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdCgpfS4gIElmCiAgICAgICAgICAgeW91ciBwcm9ncmFtIHVzZXMgQ3twc3ljb30gdG8gImNvbXBpbGUgYXMgeW91IGdvIiwgeW91IG11c3QgY2FsbAogICAgICAgICAgIEN7ZW5hYmxlUGFja3JhdH0gYmVmb3JlIGNhbGxpbmcgQ3twc3ljby5mdWxsKCl9LiAgSWYgeW91IGRvIG5vdCBkbyB0aGlzLAogICAgICAgICAgIFB5dGhvbiB3aWxsIGNyYXNoLiAgRm9yIGJlc3QgcmVzdWx0cywgY2FsbCBDe2VuYWJsZVBhY2tyYXQoKX0gaW1tZWRpYXRlbHkKICAgICAgICAgICBhZnRlciBpbXBvcnRpbmcgcHlwYXJzaW5nLgogICAgICAgICAgIAogICAgICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICAgICBpbXBvcnQgcHlwYXJzaW5nCiAgICAgICAgICAgICAgIHB5cGFyc2luZy5QYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXQoKQogICAgICAgIFROKQdyJAAAANoPX3BhY2tyYXRFbmFibGVkcpIBAABynAEAAHKWAQAAcp8BAABydAEAACkBWhBjYWNoZV9zaXplX2xpbWl0cncAAABydwAAAHJ4AAAA2g1lbmFibGVQYWNrcmF0AAYAAHMMAAAAABsGAQYBCAEMAgwBehtQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXRjAwAAAAAAAAAIAAAAEAAAAEMAAABzsgAAAHQAagGDAAEAfABqAnMWfABqA4MAAQB4FnwAagREAF0MfQN8A2oDgwABAHEeVwB8AGoFczx8AWoGgwB9AXk8fABqB3wBZAGDAlwCfQR9BXwCcnZ8AGoIfAF8BIMCfQR0CYMAdAqDABcAfQZ8BmoHfAF8BIMCAQBXAG4wBAB0C2sKcqgBAH0HAQB6FHQAagxylIIAbgR8B4IBVwBZAGQCZAJ9B34HWABuBlgAfAVTAGQCUwApA2FCBQAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuCiAgICAgICAgVGhpcyBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgdG8gdGhlIGNsaWVudCBjb2RlLCBvbmNlIHRoZSBjb21wbGV0ZQogICAgICAgIGV4cHJlc3Npb24gaGFzIGJlZW4gYnVpbHQuCgogICAgICAgIElmIHlvdSB3YW50IHRoZSBncmFtbWFyIHRvIHJlcXVpcmUgdGhhdCB0aGUgZW50aXJlIGlucHV0IHN0cmluZyBiZQogICAgICAgIHN1Y2Nlc3NmdWxseSBwYXJzZWQsIHRoZW4gc2V0IEN7cGFyc2VBbGx9IHRvIFRydWUgKGVxdWl2YWxlbnQgdG8gZW5kaW5nCiAgICAgICAgdGhlIGdyYW1tYXIgd2l0aCBDe0x7U3RyaW5nRW5kKCl9fSkuCgogICAgICAgIE5vdGU6IEN7cGFyc2VTdHJpbmd9IGltcGxpY2l0bHkgY2FsbHMgQ3tleHBhbmR0YWJzKCl9IG9uIHRoZSBpbnB1dCBzdHJpbmcsCiAgICAgICAgaW4gb3JkZXIgdG8gcmVwb3J0IHByb3BlciBjb2x1bW4gbnVtYmVycyBpbiBwYXJzZSBhY3Rpb25zLgogICAgICAgIElmIHRoZSBpbnB1dCBzdHJpbmcgY29udGFpbnMgdGFicyBhbmQKICAgICAgICB0aGUgZ3JhbW1hciB1c2VzIHBhcnNlIGFjdGlvbnMgdGhhdCB1c2UgdGhlIEN7bG9jfSBhcmd1bWVudCB0byBpbmRleCBpbnRvIHRoZQogICAgICAgIHN0cmluZyBiZWluZyBwYXJzZWQsIHlvdSBjYW4gZW5zdXJlIHlvdSBoYXZlIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBpbnB1dAogICAgICAgIHN0cmluZyBieToKICAgICAgICAgLSBjYWxsaW5nIEN7cGFyc2VXaXRoVGFic30gb24geW91ciBncmFtbWFyIGJlZm9yZSBjYWxsaW5nIEN7cGFyc2VTdHJpbmd9CiAgICAgICAgICAgKHNlZSBMe0l7cGFyc2VXaXRoVGFic308cGFyc2VXaXRoVGFicz59KQogICAgICAgICAtIGRlZmluZSB5b3VyIHBhcnNlIGFjdGlvbiB1c2luZyB0aGUgZnVsbCBDeyhzLGxvYyx0b2tzKX0gc2lnbmF0dXJlLCBhbmQKICAgICAgICAgICByZWZlcmVuY2UgdGhlIGlucHV0IHN0cmluZyB1c2luZyB0aGUgcGFyc2UgYWN0aW9uJ3MgQ3tzfSBhcmd1bWVudAogICAgICAgICAtIGV4cGxpY3RseSBleHBhbmQgdGhlIHRhYnMgaW4geW91ciBpbnB1dCBzdHJpbmcgYmVmb3JlIGNhbGxpbmcKICAgICAgICAgICBDe3BhcnNlU3RyaW5nfQogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScpICAjIC0+IFsnYWFhYWEnXQogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScsIHBhcnNlQWxsPVRydWUpICAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgZW5kIG9mIHRleHQKICAgICAgICByAQAAAE4pDXIkAAAAcqABAAByXwEAANoKc3RyZWFtbGluZXJdAQAAclwBAADaCmV4cGFuZHRhYnNydAEAAHKDAQAAcg0AAAByKQAAAHIdAAAA2hJ2ZXJib3NlX3N0YWNrdHJhY2UpCHKeAAAAci0BAADaCHBhcnNlQWxscoABAABymQAAAHKIAQAAWgJzZXIzAQAAcncAAABydwAAAHJ4AAAA2gtwYXJzZVN0cmluZyMGAABzJAAAAAAbCAEGAQgCDAEMAQYBCAECARABBAEMAQwBEAEQAQYBBAMWAnoZUGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ2MEAAAAAAAAAA8AAAARAAAAYwAAAHNAAQAAfABqAHMOfABqAYMAAQB4FnwAagJEAF0MfQR8BGoBgwABAHEWVwB8AGoDczh0BHwBgwFqBYMAfQF0BnwBgwF9BWQBfQZ8AGoHfQd8AGoIfQh0CWoKgwABAGQBfQl5qnikfAZ8BWsBb258CXwCawCQAXICeSB8B3wBfAaDAn0KfAh8AXwKZAJkA40DXAJ9C30MVwBuHAQAdAtrCnKuAQABAAEAfApkBBcAfQZZAHFgWAB8C3wGawRy+HwJZAQ3AH0JfAx8CnwLZgNWAAEAfANy8nwHfAF8BoMCfQ18DXwGawRy6HwLfQZx9nwGZAQ3AH0GbgR8C30GcWB8CmQEFwB9BnFgVwBXAG40BAB0DGsKkAFyOgEAfQ4BAHoWdAlqDZABciaCAG4EfA6CAVcAWQBkBWQFfQ5+DlgAbgJYAGQFUwApBmGGBAAACiAgICAgICAgU2NhbiB0aGUgaW5wdXQgc3RyaW5nIGZvciBleHByZXNzaW9uIG1hdGNoZXMuICBFYWNoIG1hdGNoIHdpbGwgcmV0dXJuIHRoZQogICAgICAgIG1hdGNoaW5nIHRva2Vucywgc3RhcnQgbG9jYXRpb24sIGFuZCBlbmQgbG9jYXRpb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBDe21heE1hdGNoZXN9IGFyZ3VtZW50LCB0byBjbGlwIHNjYW5uaW5nIGFmdGVyICduJyBtYXRjaGVzIGFyZSBmb3VuZC4gIElmCiAgICAgICAgQ3tvdmVybGFwfSBpcyBzcGVjaWZpZWQsIHRoZW4gb3ZlcmxhcHBpbmcgbWF0Y2hlcyB3aWxsIGJlIHJlcG9ydGVkLgoKICAgICAgICBOb3RlIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgbG9jYXRpb25zIGFyZSByZXBvcnRlZCByZWxhdGl2ZSB0byB0aGUgc3RyaW5nCiAgICAgICAgYmVpbmcgcGFyc2VkLiAgU2VlIEx7SXtwYXJzZVN0cmluZ308cGFyc2VTdHJpbmc+fSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYXJzaW5nCiAgICAgICAgc3RyaW5ncyB3aXRoIGVtYmVkZGVkIHRhYnMuCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBzb3VyY2UgPSAic2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3IgogICAgICAgICAgICBwcmludChzb3VyY2UpCiAgICAgICAgICAgIGZvciB0b2tlbnMsc3RhcnQsZW5kIGluIFdvcmQoYWxwaGFzKS5zY2FuU3RyaW5nKHNvdXJjZSk6CiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyAnXicqKGVuZC1zdGFydCkpCiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyB0b2tlbnNbMF0pCiAgICAgICAgCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAKICAgICAgICAgICAgc2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3CiAgICAgICAgICAgIF5eXl5eCiAgICAgICAgICAgIHNsZGpmCiAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgogICAgICAgICAgICAgICAgICAgIGxzZGpqa2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZGtqZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGtqc2ZkCiAgICAgICAgcgEAAABGKQFycAEAAHJyAAAATikOcl8BAABypAEAAHJdAQAAclwBAAByhAAAAHKlAQAActgAAABygwEAAHJ0AQAAciQAAAByoAEAAHIfAAAAch0AAABypgEAACkPcp4AAAByLQEAANoKbWF4TWF0Y2hlc1oHb3ZlcmxhcHKAAQAA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KG4sKX0gaXMgZXF1aXZhbGVudAogICAgICAgICAgICAgIHRvIEN7ZXhwcipuICsgTHtaZXJvT3JNb3JlfShleHByKX0KICAgICAgICAgICAgICAocmVhZCBhcyAiYXQgbGVhc3QgbiBpbnN0YW5jZXMgb2YgQ3tleHByfSIpCiAgICAgICAgIC0gQ3tleHByKihOb25lLG4pfSBpcyBlcXVpdmFsZW50IHRvIEN7ZXhwciooMCxuKX0KICAgICAgICAgICAgICAocmVhZCBhcyAiMCB0byBuIGluc3RhbmNlcyBvZiBDe2V4cHJ9IikKICAgICAgICAgLSBDe2V4cHIqKE5vbmUsTm9uZSl9IGlzIGVxdWl2YWxlbnQgdG8gQ3tMe1plcm9Pck1vcmV9KGV4cHIpfQogICAgICAgICAtIEN7ZXhwciooMSxOb25lKX0gaXMgZXF1aXZhbGVudCB0byBDe0x7T25lT3JNb3JlfShleHByKX0KCiAgICAgICAgTm90ZSB0aGF0IEN7ZXhwciooTm9uZSxuKX0gZG9lcyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmCiAgICAgICAgbW9yZSB0aGFuIG4gZXhwcnMgZXhpc3QgaW4gdGhlIGlucHV0IHN0cmVhbTsgdGhhdCBpcywKICAgICAgICBDe2V4cHIqKE5vbmUsbil9IGRvZXMgbm90IGVuZm9yY2UgYSBtYXhpbXVtIG51bWJlciBvZiBleHByCiAgICAgICAgb2NjdXJyZW5jZXMuICBJZiB0aGlzIGJlaGF2aW9yIGlzIGRlc2lyZWQsIHRoZW4gd3JpdGUKICAgICAgICBDe2V4cHIqKE5vbmUsbikgKyB+ZXhwcn0KICAgICAgICByAQAAAE5ycQAAAHJyAAAAejdjYW5ub3QgbXVsdGlwbHkgJ1BhcnNlckVsZW1lbnQnIGFuZCAoJyVzJywnJXMnKSBvYmplY3RzejBjYW5ub3QgbXVsdGlwbHkgJ1BhcnNlckVsZW1lbnQnIGFuZCAnJXMnIG9iamVjdHN6L2Nhbm5vdCBtdWx0aXBseSBQYXJzZXJFbGVtZW50IGJ5IG5lZ2F0aXZlIHZhbHVlekBzZWNvbmQgdHVwbGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIGZp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ICAgICAgICMgdHVybiBvbiBkZWJ1Z2dpbmcgZm9yIHdkCiAgICAgICAgICAgIHdkLnNldERlYnVnKCkKCiAgICAgICAgICAgIE9uZU9yTW9yZSh0ZXJtKS5wYXJzZVN0cmluZygiYWJjIDEyMyB4eXogODkwIikKICAgICAgICAKICAgICAgICBwcmludHM6OgogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDAoMSwxKQogICAgICAgICAgICBNYXRjaGVkIGFscGhhd29yZCAtPiBbJ2FiYyddCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMygxLDQpCiAgICAgICAgICAgIEV4Y2VwdGlvbiByYWlzZWQ6RXhwZWN0ZWQgYWxwaGF3b3JkIChhdCBjaGFyIDQpLCAobGluZToxLCBjb2w6NSkKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyA3KDEsOCkKICAgICAgICAgICAgTWF0Y2hlZCBhbHBoYXdvcmQgLT4gWyd4eXonXQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDExKDEsMTIpCiAgICAgICAgICAgIEV4Y2VwdGlvbiByYWlzZWQ6RXhwZWN0ZWQgYWxwaGF3b3JkIChhdCBjaGFyIDEyKSwgKGxpbmU6MSwgY29sOjEzKQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDE1KDEsMTYpCiAgICAgICAgICAgIEV4Y2VwdGlvbiByYWlzZWQ6RXhwZWN0ZWQgYWxwaGF3b3JkIChhdCBjaGFyIDE1KSwgKGxpbmU6MSwgY29sOjE2KQoKICAgICAgICBUaGUgb3V0cHV0IHNob3duIGlzIHRoYXQgcHJvZHVjZWQgYnkgdGhlIGRlZmF1bHQgZGVidWcgYWN0aW9ucyAtIGN1c3RvbSBkZWJ1ZyBhY3Rpb25zIGNhbiBiZQogICAgICAgIHNwZWNpZmllZCB1c2luZyBMe3NldERlYnVnQWN0aW9uc30uIFByaW9yIHRvIGF0dGVtcHRpbmcKICAgICAgICB0byBtYXRjaCB0aGUgQ3t3ZH0gZXhwcmVzc2lvbiwgdGhlIGRlYnVnZ2luZyBtZXNzYWdlIEN7Ik1hdGNoIDxleHBybmFtZT4gYXQgbG9jIDxuPig8bGluZT4sPGNvbD4pIn0KICAgICAgICBpcyBzaG93bi4gVGhlbiBpZiB0aGUgcGFyc2Ugc3VjY2VlZHMsIGEgQ3siTWF0Y2hlZCJ9IG1lc3NhZ2UgaXMgc2hvd24sIG9yIGFuIEN7IkV4Y2VwdGlvbiByYWlzZWQifQogICAgICAgIG1lc3NhZ2UgaXMgc2hvd24uIEFsc28gbm90ZSB0aGUgdXNlIG9mIEx7c2V0TmFtZX0gdG8gYXNzaWduIGEgaHVtYW4tcmVhZGFibGUgbmFtZSB0byB0aGUgZXhwcmVzc2lvbiwKICAgICAgICB3aGljaCBtYWtlcyBkZWJ1Z2dpbmcgYW5kIGV4Y2VwdGlvbiBtZXNzYWdlcyBlYXNpZXIgdG8gdW5kZXJzdGFuZCAtIGZvciBpbnN0YW5jZSwgdGhlIGRlZmF1bHQKICAgICAgICBuYW1lIGNyZWF0ZWQgZm9yIHRoZSBDe1dvcmR9IGV4cHJlc3Npb24gd2l0aG91dCBjYWxsaW5nIEN7c2V0TmFtZX0gaXMgQ3siVzooQUJDRC4uLikifS4KICAgICAgICBGKQVyygEAAHIvAQAAcjIBAAByNAEAAHJeAQAAKQJyngAAANoEZmxhZ3J3AAAAcncAAAByeAAAANoIc2V0RGVidWcXCAAAcwgAAAAAIwQBEAIGAXoWUGFyc2VyRWxlbWVudC5zZXREZWJ1Z2MBAAAAAAAAAAEAAAABAAAAQwAAAHMGAAAAfABqAFMAKQFOKQFyvgAAACkBcp4AAABydwAAAHJ3AAAAcngAAABypwAAAEAIAABzAgAAAAABehVQYXJzZXJFbGVtZW50Ll9fc3RyX19jAQAAAAAAAAABAAAAAgAAAEMAAABzCAAAAHQAfACDAVMAKQFOKQFyhAAAACkBcp4AAABydwAAAHJ3AAAAcngAAAByqAAAAEMIAABzAgAAAAABehZQYXJzZXJFbGVtZW50Ll9fcmVwcl9fYwEAAAAAAAAAAQAAAAIAAABDAAAAcxAAAABkAXwAXwBkAHwAXwF8AFMAKQJOVCkCcl8BAAByVQEAACkBcp4AAABydwAAAHJ3AAAAcngAAABypAEAAEYIAABzBgAAAAABBgEGAXoYUGFyc2VyRWxlbWVudC5zdHJlYW1saW5lYwIAAAAAAAAAAgAAAAEAAABDAAAAcwQAAABkAFMAKQFOcncAAAApAnKeAAAAcrMAAABydwAAAHJ3AAAAcngAAADaDmNoZWNrUmVjdXJzaW9uSwgAAHMCAAAAAAF6HFBhcnNlckVsZW1lbnQuY2hlY2tSZWN1cnNpb25jAgAAAAAAAAACAAAAAgAAAEMAAABzDgAAAHwAagBnAIMBAQBkAVMAKQJ6agogICAgICAgIENoZWNrIGRlZmluZWQgZXhwcmVzc2lvbnMgZm9yIHZhbGlkIHN0cnVjdHVyZSwgY2hlY2sgZm9yIGluZmluaXRlIHJlY3Vyc2l2ZSBkZWZpbml0aW9ucy4KICAgICAgICBOKQFyzQEAACkCcp4AAADaDXZhbGlkYXRlVHJhY2VydwAAAHJ3AAAAcngAAADaCHZhbGlkYXRlTggAAHMCAAAAAAR6FlBhcnNlckVsZW1lbnQudmFsaWRhdGVjAwAAAAAAAAAGAAAAHQAAAEMAAABzggAAAHkMfAFqAIMAfQNXAG4yBAB0AWsKcj4BAAEAAQB0AnwBZAGDAo8OfQR8BGoAgwB9A1cAZAJRAFIAWABZAG4CWAB5DHwAagN8A3wCgwJTAAQAdARrCnJ8AQB9BQEAehR0BWoGcmiCAG4EfAWCAVcAWQBkAmQCfQV+BVgAbgJYAGQCUwApA3rQCiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiBvbiB0aGUgZ2l2ZW4gZmlsZSBvciBmaWxlbmFtZS4KICAgICAgICBJZiBhIGZpbGVuYW1lIGlzIHNwZWNpZmllZCAoaW5zdGVhZCBvZiBhIGZpbGUgb2JqZWN0KSwKICAgICAgICB0aGUgZW50aXJlIGZpbGUgaXMgb3BlbmVkLCByZWFkLCBhbmQgY2xvc2VkIGJlZm9yZSBwYXJzaW5nLgogICAgICAgINoBck4pB9oEcmVhZHKlAAAA2gRvcGVucqgBAAByHQAAAHIkAAAAcqYBAAApBnKeAAAAWhBmaWxlX29yX2ZpbGVuYW1lcqcBAABaDWZpbGVfY29udGVudHPaAWZyMwEAAHJ3AAAAcncAAAByeAAAANoJcGFyc2VGaWxlVAgAAHMWAAAAAAYCAQwBDgEMARgBAgEMARABBgEEA3oXUGFyc2VyRWxlbWVudC5wYXJzZUZpbGVjAgAAAAAAAAACAAAAAwAAAAMAAABzSAAAAHQAfAF0AYMCciJ8AHwBawhwIHQCfACDAXQCfAGDAWsCUwB0AHwBdAODAnI2fABqBHwBgwFTAHQFdAF8AIMCfAFrAlMAZABTACkBTikGcnoAAAByJAAAANoEdmFyc3LLAAAAcqoBAADaBXN1cGVyKQJyngAAAHL/AAAAKQFySAEAAHJ3AAAAcngAAADaBl9fZXFfX2gIAABzCgAAAAABCgEYAQoBCgJ6FFBhcnNlckVsZW1lbnQuX19lcV9fYwIAAAAAAAAAAgAAAAIAAABDAAAAcwoAAAB8AHwBawIMAFMAKQFOcncAAAApAnKeAAAAcv8AAABydwAAAHJ3AAAAcngAAADaBl9fbmVfX3AIAABzAgAAAAABehRQYXJzZXJFbGVtZW50Ll9fbmVfX2MBAAAAAAAAAAEAAAADAAAAQwAAAHMMAAAAdAB0AXwAgwGDAVMAKQFOKQLaBGhhc2jaAmlkKQFyngAAAHJ3AAAAcncAAAByeAAAANoIX19oYXNoX19zCAAAcwIAAAAAAXoWUGFyc2VyRWxlbWVudC5fX2hhc2hfX2MCAAAAAAAAAAIAAAACAAAAQwAAAHMIAAAAfAB8AWsCUwApAU5ydwAAACkCcp4AAABy/wAAAHJ3AAAAcncAAAByeAAAANoHX19yZXFfX3YIAABzAgAAAAABehVQYXJzZXJFbGVtZW50Ll9fcmVxX19jAgAAAAAAAAACAAAAAgAAAEMAAABzCgAAAHwAfAFrAgwAUwApAU5ydwAAACkCcp4AAABy/wAAAHJ3AAAAcncAAAByeAAAANoHX19ybmVfX3kIAABzAgAAAAABehVQYXJzZXJFbGVtZW50Ll9fcm5lX19jAwAAAAAAAAADAAAACwAAAEMAAABzMAAAAHkWfABqAHQBfAGDAXwCZAGNAgEAZAJTAAQAdAJrCnIqAQABAAEAZANTAFgAZARTACkFYdMBAAAKICAgICAgICBNZXRob2QgZm9yIHF1aWNrIHRlc3Rpbmcgb2YgYSBwYXJzZXIgYWdhaW5zdCBhIHRlc3Qgc3RyaW5nLiBHb29kIGZvciBzaW1wbGUgCiAgICAgICAgaW5saW5lIG1pY3JvdGVzdHMgb2Ygc3ViIGV4cHJlc3Npb25zIHdoaWxlIGJ1aWxkaW5nIHVwIGxhcmdlciBwYXJzZXIuCiAgICAgICAgICAgCiAgICAgICAgUGFyYW1ldGVyczoKICAgICAgICAgLSB0ZXN0U3RyaW5nIC0gdG8gdGVzdCBhZ2FpbnN0IHRoaXMgZXhwcmVzc2lvbiBmb3IgYSBtYXRjaAogICAgICAgICAtIHBhcnNlQWxsIC0gKGRlZmF1bHQ9Q3tUcnVlfSkgLSBmbGFnIHRvIHBhc3MgdG8gQ3tMe3BhcnNlU3RyaW5nfX0gd2hlbiBydW5uaW5nIHRlc3RzCiAgICAgICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBleHByID0gV29yZChudW1zKQogICAgICAgICAgICBhc3NlcnQgZXhwci5tYXRjaGVzKCIxMDAiKQogICAgICAgICkBcqcBAABURk4pA3KoAQAAcoQAAAByHQAAACkDcp4AAABaCnRlc3RTdHJpbmdypwEAAHJ3AAAAcncAAAByeAAAAHKqAQAAfAgAAHMKAAAAAA0CARIBBAEOAXoVUGFyc2VyRWxlbWVudC5tYXRjaGVz+gEjYwcAAAAAAAAAEAAAABIAAABDAAAAc/oBAAB0AHwBdAGDAnIidAJ0A3QEagV8AWoGgwBqB4MAgwKDAX0BdAB8A3QBgwJyNHQIfAODAX0DZwB9B2cAfQhkAX0JkAF4rnwBRACQAV2kfQp8A2QCawlyYnwDagl8CmQDgwJzbHwIcnh8CgwAcnh8CGoKfAqDAQEAcUh8CnN+cUhkBGoLfAiDAXwKZwJ9C2cAfQh5OnwKagxkBWQEgwJ9CnwAag18CnwCZAaNAn0MfAtqCnwMag58BGQHjQGDAQEAfAlvxnwGDAB9CVcAbvAEAHQPawqQAXJ4AQB9DQEAepB0AHwNdBCDAnLsZAhuAmQJfQ5kBHwKawaQAXIwfAtqCnQRfA1qEnwKgwKDAQEAfAtqCmQKdBN8DWoSfAqDAmQLGAAUAGQMFwB8DhcAgwEBAG4YfAtqCmQKfA1qEhQAZAwXAHwOFwCDAQEAfAtqCmQNdAR8DYMBFwCDAQEAfAmQAW9ifAZ9CXwNfQxXAFkAZAJkAn0Nfg1YAG5EBAB0FGsKkAFyugEAfQ8BAHomfAtqCmQOdAR8D4MBFwCDAQEAfAmQAW+kfAZ9CXwPfQxXAFkAZAJkAn0Pfg9YAG4CWAB8BZABcuB8BJABctJ8C2oKZAmDAQEAdBVkBGoLfAuDAYMBAQB8B2oKfAp8DGYCgwEBAHFIVwB8CXwHZgJTACkPYTMMAAAKICAgICAgICBFeGVjdXRlIHRoZSBwYXJzZSBleHByZXNzaW9uIG9uIGEgc2VyaWVzIG9mIHRlc3Qgc3RyaW5ncywgc2hvd2luZyBlYWNoCiAgICAgICAgdGVzdCwgdGhlIHBhcnNlZCByZXN1bHRzIG9yIHdoZXJlIHRoZSBwYXJzZSBmYWlsZWQuIFF1aWNrIGFuZCBlYXN5IHdheSB0bwogICAgICAgIHJ1biBhIHBhcnNlIGV4cHJlc3Npb24gYWdhaW5zdCBhIGxpc3Qgb2Ygc2FtcGxlIHN0cmluZ3MuCiAgICAgICAgICAgCiAgICAgICAgUGFyYW1ldGVyczoKICAgICAgICAgLSB0ZXN0cyAtIGEgbGlzdCBvZiBzZXBhcmF0ZSB0ZXN0IHN0cmluZ3MsIG9yIGEgbXVsdGlsaW5lIHN0cmluZyBvZiB0ZXN0IHN0cmluZ3MKICAgICAgICAgLSBwYXJzZUFsbCAtIChkZWZhdWx0PUN7VHJ1ZX0pIC0gZmxhZyB0byBwYXNzIHRvIEN7THtwYXJzZVN0cmluZ319IHdoZW4gcnVubmluZyB0ZXN0cyAgICAgICAgICAgCiAgICAgICAgIC0gY29tbWVudCAtIChkZWZhdWx0PUN7JyMnfSkgLSBleHByZXNzaW9uIGZvciBpbmRpY2F0aW5nIGVtYmVkZGVkIGNvbW1lbnRzIGluIHRoZSB0ZXN0IAogICAgICAgICAgICAgIHN0cmluZzsgcGFzcyBOb25lIHRvIGRpc2FibGUgY29tbWVudCBmaWx0ZXJpbmcKICAgICAgICAgLSBmdWxsRHVtcCAtIChkZWZhdWx0PUN7VHJ1ZX0pIC0gZHVtcCByZXN1bHRzIGFzIGxpc3QgZm9sbG93ZWQgYnkgcmVzdWx0cyBuYW1lcyBpbiBuZXN0ZWQgb3V0bGluZTsKICAgICAgICAgICAgICBpZiBGYWxzZSwgb25seSBkdW1wIG5lc3RlZCBsaXN0CiAgICAgICAgIC0gcHJpbnRSZXN1bHRzIC0gKGRlZmF1bHQ9Q3tUcnVlfSkgcHJpbnRzIHRlc3Qgb3V0cHV0IHRvIHN0ZG91dAogICAgICAgICAtIGZhaWx1cmVUZXN0cyAtIChkZWZhdWx0PUN7RmFsc2V9KSBpbmRpY2F0ZXMgaWYgdGhlc2UgdGVzdHMgYXJlIGV4cGVjdGVkIHRvIGZhaWwgcGFyc2luZwoKICAgICAgICBSZXR1cm5zOiBhIChzdWNjZXNzLCByZXN1bHRzKSB0dXBsZSwgd2hlcmUgc3VjY2VzcyBpbmRpY2F0ZXMgdGhhdCBhbGwgdGVzdHMgc3VjY2VlZGVkCiAgICAgICAgKG9yIGZhaWxlZCBpZiBDe2ZhaWx1cmVUZXN0c30gaXMgVHJ1ZSksIGFuZCB0aGUgcmVzdWx0cyBjb250YWluIGEgbGlzdCBvZiBsaW5lcyBvZiBlYWNoIAogICAgICAgIHRlc3QncyBvdXRwdXQKICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgbnVtYmVyX2V4cHIgPSBweXBhcnNpbmdfY29tbW9uLm51bWJlci5jb3B5KCkKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyB1bnNpZ25lZCBpbnRlZ2VyCiAgICAgICAgICAgICAgICAxMDAKICAgICAgICAgICAgICAgICMgbmVnYXRpdmUgaW50ZWdlcgogICAgICAgICAgICAgICAgLTEwMAogICAgICAgICAgICAgICAgIyBmbG9hdCB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgICAgICMgaW50ZWdlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICAgICAnJycpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCgogICAgICAgICAgICByZXN1bHQgPSBudW1iZXJfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgICAgICMgc3RyYXkgY2hhcmFjdGVyCiAgICAgICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgICAjIG1pc3NpbmcgbGVhZGluZyBkaWdpdCBiZWZvcmUgJy4nCiAgICAgICAgICAgICAgICAtLjEwMAogICAgICAgICAgICAgICAgIyB0b28gbWFueSAnLicKICAgICAgICAgICAgICAgIDMuMTQuMTU5CiAgICAgICAgICAgICAgICAnJycsIGZhaWx1cmVUZXN0cz1UcnVlKQogICAgICAgICAgICBwcmludCgiU3VjY2VzcyIgaWYgcmVzdWx0WzBdIGVsc2UgIkZhaWxlZCEiKQogICAgICAgIHByaW50czo6CiAgICAgICAgICAgICMgdW5zaWduZWQgaW50ZWdlcgogICAgICAgICAgICAxMDAKICAgICAgICAgICAgWzEwMF0KCiAgICAgICAgICAgICMgbmVnYXRpdmUgaW50ZWdlcgogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgIFstMTAwXQoKICAgICAgICAgICAgIyBmbG9hdCB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgICAgICAjIGludGVnZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgIFsxZS0xMl0KCiAgICAgICAgICAgIFN1Y2Nlc3MKICAgICAgICAgICAgCiAgICAgICAgICAgICMgc3RyYXkgY2hhcmFjdGVyCiAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciAzKSwgKGxpbmU6MSwgY29sOjQpCgogICAgICAgICAgICAjIG1pc3NpbmcgbGVhZGluZyBkaWdpdCBiZWZvcmUgJy4nCiAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQge3JlYWwgbnVtYmVyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbiB8IHJlYWwgbnVtYmVyIHwgc2ln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b3JpZ2luYWwgbWF0Y2hfc3RyaW5nIHVzZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSBpbnB1dCBzdHJpbmcKICAgIAogICAgSWYgQ3ttaXNtYXRjaGVzfSBpcyBhbiBlbXB0eSBsaXN0LCB0aGVuIHRoZSBtYXRjaCB3YXMgYW4gZXhhY3QgbWF0Y2guCiAgICAKICAgIEV4YW1wbGU6OgogICAgICAgIHBhdHQgPSBDbG9zZU1hdGNoKCJBVENBVENHQUFUR0dBIikKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBVENHQUFYR0dBIikgIyAtPiAoWydBVENBVENHQUFYR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbOV1dLCAnb3JpZ2luYWwnOiBbJ0FUQ0FUQ0dBQVRHR0EnXX0pCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVhDR0FBWEdHQSIpICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCAnQVRDQVRDR0FBVEdHQScgKHdpdGggdXAgdG8gMSBtaXNtYXRjaGVzKSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCgogICAgICAgICMgZXhhY3QgbWF0Y2gKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBVENHQUFUR0dBIikgIyAtPiAoWydBVENBVENHQUFUR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbXV0sICdvcmlnaW5hbCc6IFsnQVRDQVRDR0FBVEdHQSddfSkKCiAgICAgICAgIyBjbG9zZSBtYXRjaCBhbGxvd2luZyB1cCB0byAyIG1pc21hdGNoZXMKICAgICAgICBwYXR0ID0gQ2xvc2VNYXRjaCgiQVRDQVRDR0FBVEdHQSIsIG1heE1pc21hdGNoZXM9MikKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBWENHQUFYR0dBIikgIyAtPiAoWydBVENBWENHQUFYR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbNCwgOV1dLCAnb3JpZ2luYWwnOiBbJ0FUQ0FUQ0dBQVRHR0EnXX0pCiAgICBycgAAAGMDAAAAAAAAAAMAAAADAAAAAwAAAHNCAAAAdAB0AXwAgwJqAoMAAQB8AXwAXwN8AXwAXwR8AnwAXwVkAXwAagR8AGoFZgIWAHwAXwZkAnwAXwdkAnwAXwhkAFMAKQNOeiZFeHBlY3RlZCAlciAod2l0aCB1cCB0byAlZCBtaXNtYXRjaGVzKUYpCXLWAQAAcmwAAAByoAAAAHK+AAAA2gxtYXRjaF9zdHJpbmfaDW1heE1pc21hdGNoZXNyYQEAAHJgAQAAclsBAAApA3KeAAAAcvUBAABy9gEAACkBckgBAABydwAAAHJ4AAAAcqAAAADhCQAAcw4AAAAAAQ4BBgEGAQYBEgEGAXoTQ2xvc2VNYXRjaC5fX2luaXRfX1RjBAAAAAAAAAAPAAAABQAAAEMAAABzzAAAAHwCfQR0AHwBgwF9BXwEdAB8AGoBgwEXAH0GfAZ8BWsBcrh8AGoBfQdkAX0IZwB9CXwAagJ9CniAdAN0BHwBfAJ8BoUCGQB8AGoBgwKDAUQAXTBcAn0IfQt8C1wCfQx9DXwMfA1rA3JQfAlqBXwIgwEBAHQAfAmDAXwKawRyUFAAcVBXAHwIZAIXAH0CdAZ8AXwEfAKFAhkAZwGDAX0OfABqAXwOZAM8AHwJfA5kBDwAfAJ8DmYCUwB0B3wBfAJ8AGoIfACDBIIBZABTACkFTnIBAAAAcnIAAADaCG9yaWdpbmFs2gptaXNtYXRjaGVzKQly2AAAAHL1AQAAcvYBAABy3QAAAHKMAAAAcvsAAAByIgAAAHIfAAAAcmEBAAApD3KeAAAAci0BAABymQAAAHJvAQAA2gVzdGFydHKCAQAA2gZtYXhsb2Ny9QEAAFoPbWF0Y2hfc3RyaW5nbG9jcvgBAABy9gEAAFoDc19t2gNzcmPaA21hdNoHcmVzdWx0c3J3AAAAcncAAAByeAAAAHKEAQAA6gkAAHMoAAAAAAEEAQgBDgIIAQYBBAEEAQYCIgEIAQgBCgEMAQYCCAESAQoBCAEIAnoUQ2xvc2VNYXRjaC5wYXJzZUltcGwpAXJyAAAAKQFUKQdykQAAAHKSAAAAcpMAAABysAAAAHKgAAAAcoQBAABy6AEAAHJ3AAAAcncAAAApAXJIAQAAcngAAABybAAAAMgJAABzBgAAAAgYBAEOCWMAAAAAAAAAAAAAAAAGAAAAAAAAAHM4AAAAZQBaAWQAWgJkAVoDZA2HAGYBZAZkB4QJWgRkDmQJZAqEAVoFhwBmAWQLZAyECFoGhwAEAFoHUwApD3IvAAAAYRQJAAAKICAgIFRva2VuIGZvciBtYXRjaGluZyB3b3JkcyBjb21wb3NlZCBvZiBhbGxvd2VkIGNoYXJhY3RlciBzZXRzLgogICAgRGVmaW5lZCB3aXRoIHN0cmluZyBjb250YWluaW5nIGFsbCBhbGxvd2VkIGluaXRpYWwgY2hhcmFjdGVycywKICAgIGFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIGFsbG93ZWQgYm9keSBjaGFyYWN0ZXJzIChpZiBvbWl0dGVkLAogICAgZGVmYXVsdHMgdG8gdGhlIGluaXRpYWwgY2hhcmFjdGVyIHNldCksIGFuZCBhbiBvcHRpb25hbCBtaW5pbXVtLAogICAgbWF4aW11bSwgYW5kL29yIGV4YWN0IGxlbmd0aC4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBDe21pbn0gaXMgMSAoYQogICAgbWluaW11bSB2YWx1ZSA8IDEgaXMgbm90IHZhbGlkKTsgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBDe21heH0gYW5kIEN7ZXhhY3R9CiAgICBhcmUgMCwgbWVhbmluZyBubyBtYXhpbXVtIG9yIGV4YWN0IGxlbmd0aCByZXN0cmljdGlvbi4gQW4gb3B0aW9uYWwKICAgIEN7ZXhjbHVkZUNoYXJzfSBwYXJhbWV0ZXIgY2FuIGxpc3QgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGJlIGZvdW5kIGluIAogICAgdGhlIGlucHV0IEN7Ym9keUNoYXJzfSBzdHJpbmc7IHVzZWZ1bCB0byBkZWZpbmUgYSB3b3JkIG9mIGFsbCBwcmludGFibGVzCiAgICBleGNlcHQgZm9yIG9uZSBvciB0d28gY2hhcmFjdGVycywgZm9yIGluc3RhbmNlLgogICAgCiAgICBMe3NyYW5nZX0gaXMgdXNlZnVsIGZvciBkZWZpbmluZyBjdXN0b20gY2hhcmFjdGVyIHNldCBzdHJpbmdzIGZvciBkZWZpbmluZyAKICAgIEN7V29yZH0gZXhwcmVzc2lvbnMsIHVzaW5nIHJhbmdlIG5vdGF0aW9uIGZyb20gcmVndWxhciBleHByZXNzaW9uIGNoYXJhY3RlciBzZXRzLgogICAgCiAgICBBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHVzZSBDe1dvcmR9IHRvIG1hdGNoIGEgc3BlY2lmaWMgbGl0ZXJhbCBzdHJpbmcsIGFzIGluIAogICAgQ3tXb3JkKCJBZGRyZXNzIil9LiBSZW1lbWJlciB0aGF0IEN7V29yZH0gdXNlcyB0aGUgc3RyaW5nIGFyZ3VtZW50IHRvIGRlZmluZQogICAgSXtzZXRzfSBvZiBtYXRjaGFibGUgY2hhcmFjdGVycy4gVGhpcyBleHByZXNzaW9uIHdvdWxkIG1hdGNoICJBZGQiLCAiQUFBIiwKICAgICJkQXJlZCIsIG9yIGFueSBvdGhlciB3b3JkIG1hZGUgdXAgb2YgdGhlIGNoYXJhY3RlcnMgJ0EnLCAnZCcsICdyJywgJ2UnLCBhbmQgJ3MnLgogICAgVG8gbWF0Y2ggYW4gZXhhY3QgbGl0ZXJhbCBzdHJpbmcsIHVzZSBMe0xpdGVyYWx9IG9yIEx7S2V5d29yZH0uCgogICAgcHlwYXJzaW5nIGluY2x1ZGVzIGhlbHBlciBzdHJpbmdzIGZvciBidWlsZGluZyBXb3JkczoKICAgICAtIEx7YWxwaGFzfQogICAgIC0gTHtudW1zfQogICAgIC0gTHthbHBoYW51bXN9CiAgICAgLSBMe2hleG51bXN9CiAgICAgLSBMe2FscGhhczhiaXR9IChhbHBoYWJldGljIGNoYXJhY3RlcnMgaW4gQVNDSUkgcmFuZ2UgMTI4LTI1NSAtIGFjY2VudGVkLCB0aWxkZWQsIHVtbGF1dGVkLCBldGMuKQogICAgIC0gTHtwdW5jOGJpdH0gKG5vbi1hbHBoYWJldGljIGNoYXJhY3RlcnMgaW4gQVNDSUkgcmFuZ2UgMTI4LTI1NSAtIGN1cnJlbmN5LCBzeW1ib2xzLCBzdXBlcnNjcmlwdHMsIGRpYWNyaXRpY2FscywgZXRjLikKICAgICAtIEx7cHJpbnRhYmxlc30gKGFueSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIpCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBhIHdvcmQgY29tcG9zZWQgb2YgZGlnaXRzCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykgIyBlcXVpdmFsZW50IHRvIFdvcmQoIjAxMjM0NTY3ODkiKSBvciBXb3JkKHNyYW5nZSgiMC05IikpCiAgICAgICAgCiAgICAgICAgIyBhIHdvcmQgd2l0aCBhIGxlYWRpbmcgY2FwaXRhbCwgYW5kIHplcm8gb3IgbW9yZSBsb3dlcmNhc2UKICAgICAgICBjYXBpdGFsX3dvcmQgPSBXb3JkKGFscGhhcy51cHBlcigpLCBhbHBoYXMubG93ZXIoKSkKCiAgICAgICAgIyBob3N0bmFtZXMgYXJlIGFscGhhbnVtZXJpYywgd2l0aCBsZWFkaW5nIGFscGhhLCBhbmQgJy0nCiAgICAgICAgaG9zdG5hbWUgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKyctJykKICAgICAgICAKICAgICAgICAjIHJvbWFuIG51bWVyYWwgKG5vdCBhIHN0cmljdCBwYXJzZXIsIGFjY2VwdHMgaW52YWxpZCBtaXggb2YgY2hhcmFjdGVycykKICAgICAgICByb21hbiA9IFdvcmQoIklWWExDRE0iKQogICAgICAgIAogICAgICAgICMgYW55IHN0cmluZyBvZiBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBleGNlcHQgZm9yICcsJwogICAgICAgIGNzdl92YWx1ZSA9IFdvcmQocHJpbnRhYmxlcywgZXhjbHVkZUNoYXJzPSIsIikKICAgIE5ycgAAAHIBAAAARmMIAAAAAAAAAAgAAAALAAAAAwAAAHPMAQAAdAB0AXwAgwJqAoMAAQCIAHJGZAFqA4cAZgFkAmQDhAh8AUQAgwGDAX0BfAJyRmQBagOHAGYBZARkA4QIfAJEAIMBgwF9AnwBfABfBHQFfAGDAXwAXwZ8AnJsfAJ8AF8HdAV8AoMBfABfCG4QfAF8AF8HdAV8AYMBfABfCHwEZAVrBHwAXwl8A2QGawBylnQKZAeDAYIBfAN8AF8LfARkBWsEcqx8BHwAXwxuBnQNfABfDHwFZAVrBHLGfAV8AF8MfAV8AF8LdA58AIMBfABfD2QIfABqDxcAfABfEGQJfABfEXwGfABfEmQKfABqBHwAagcXAGsHkAFyyHwDZAZrApABcsh8BGQFawKQAXLIfAVkBWsCkAFyyHwAagd8AGoEawKQAXI4ZAt0E3wAagSDARYAfABfFG5IdBV8AGoEgwFkBmsCkAFyZmQMdBZqF3wAagSDAXQTfABqB4MBZgIWAHwAXxRuGmQNdBN8AGoEgwF0E3wAageDAWYCFgB8AF8UfABqEpABcphkDnwAahQXAGQOFwB8AF8UeRJ0FmoYfABqFIMBfABfFlcAbhwEAHQZawqQAXLGAQABAAEAZAB8AF8WWQBuAlgAZABTACkPTnKWAAAAYwEAAAAAAAAAAgAAAAMAAAAzAAAAcxoAAAB8AF0SfQF8AYgAawdyAnwBVgABAHECZABTACkBTnJ3AAAAKQJyhQAAAHKYAAAAKQHaDGV4Y2x1ZGVDaGFyc3J3AAAAcngAAAByhwAAADcKAABzAgAAAAQAeiBXb3JkLl9faW5pdF9fLjxsb2NhbHM+LjxnZW5leHByPmMBAAAAAAAAAAIAAAADAAAAMwAAAHMaAAAAfABdEn0BfAGIAGsHcgJ8AVYAAQBxAmQAUwApAU5ydwAAACkCcoUAAABymAAAACkBcv4BAABydwAAAHJ4AAAAcocAAAA5CgAAcwIAAAAEAHIBAAAAcnIAAAB6WmNhbm5vdCBzcGVjaWZ5IGEgbWluaW11bSBsZW5ndGggPCAxOyB1c2UgT3B0aW9uYWwoV29yZCgpKSBpZiB6ZXJvLWxlbmd0aCB3b3JkIGlzIHBlcm1pdHRlZHoJRXhwZWN0ZWQgRnLfAQAAegVbJXNdK3oHJXNbJXNdKnoJWyVzXVslc10qegJcYikactYBAAByLwAAAHKgAAAAcqoAAADaDWluaXRDaGFyc09yaWdyjwEAANoJaW5pdENoYXJz2g1ib2R5Q2hhcnNPcmln2glib2R5Q2hhcnPaDG1heFNwZWNpZmllZHK6AQAA2gZtaW5MZW7aBm1heExlbnLnAQAAcoQAAAByvgAAAHJhAQAAcmABAADaCWFzS2V5d29yZNoWX2VzY2FwZVJlZ2V4UmFuZ2VDaGFyc9oIcmVTdHJpbmdy2AAAAHJkAQAA2gZlc2NhcGXaB2NvbXBpbGVySwEAACkIcp4AAAByAAIAAHICAgAA2gNtaW7aA21heNoFZXhhY3RyBgIAAHL+AQAAKQFySAEAACkBcv4BAAByeAAAAHKgAAAANAoAAHNUAAAAAAEOAQQBGAEEARgBBgEKAQQBBgEMAgYBCgIKAggBCAIGAggBCAIGAggBBgEGAgoBDAEGAQYCMAEOARIBEAECAQoBEgICAQgBEAEIARABAgESARABeg1Xb3JkLl9faW5pdF9fVGMEAAAAAAAAAAoAAAAFAAAAQwAAAHNEAQAAfABqAHI8fABqAGoBfAF8AoMCfQR8BHModAJ8AXwCfABqA3wAgwSCAXwEagSDAH0CfAJ8BGoFgwBmAlMAfAF8AhkAfABqBmsHclp0AnwBfAJ8AGoDfACDBIIBfAJ9BXwCZAE3AH0CdAd8AYMBfQZ8AGoIfQd8BXwAagkXAH0IdAp8CHwGgwJ9CHggfAJ8CGsAcqh8AXwCGQB8B2sGcqh8AmQBNwB9AnGKVwBkAn0JfAJ8BRgAfABqC2sAcsBkA30JfABqDHLefAJ8BmsAct58AXwCGQB8B2sGct5kA30JfABqDZABch58BWQEawSQAXICfAF8BWQBGAAZAHwHawaQAXMafAJ8BmsAkAFyHnwBfAIZAHwHawaQAXIeZAN9CXwJkAFyNHQCfAF8AnwAagN8AIMEggF8AnwBfAV8AoUCGQBmAlMAKQVOcnIAAABGVHIBAAAAKQ5yZAEAAHLpAQAAch8AAAByYQEAANoDZW5k2gVncm91cHIAAgAActgAAAByAgIAAHIFAgAAcgsCAAByBAIAAHIDAgAAcgYCAAApCnKeAAAAci0BAABymQAAAHJvAQAAcuQBAABy+QEAAHKCAQAAWglib2R5Y2hhcnNy+gEAAFoOdGhyb3dFeGNlcHRpb25ydwAAAHJ3AAAAcngAAAByhAEAAGoKAABzNgAAAAABBgEOAQQBEAIIAQwCDgEQAgQBCAEIAQYBCgEKARYBDAIEAQ4BBAEaAQQBCAE0AQQCBgEQAnoOV29yZC5wYXJzZUltcGxjAQAAAAAAAAACAAAADAAAAAMAAABzdAAAAHkOdAB0AXwAgwJqAoMAUwAEAHQDawpyIgEAAQABAFkAbgJYAHwAagRkAGsIcm5kAWQChAB9AXwAagV8AGoGawNyXmQDfAF8AGoFgwF8AXwAagaDAWYCFgB8AF8EbhBkBHwBfABqBYMBFgB8AF8EfABqBFMAKQVOYwEAAAAAAAAAAQAAAAMAAABTAAAAcyQAAAB0AHwAgwFkAWsEchx8AGQAZAGFAhkAZAIXAFMAfABTAGQAUwApA07pBAAAAHoDLi4uKQFy2AAAACkBcooAAABydwAAAHJ3AAAAcngAAADaCmNoYXJzQXNTdHKWCgAAcwYAAAAAAQwBEAJ6IFdvcmQuX19zdHJfXy48bG9jYWxzPi5jaGFyc0FzU3RyeglXOiglcywlcyl6Blc6KCVzKSkHctYBAAByLwAAAHKnAAAAcksBAAByVQEAAHL/AQAAcgECAAApAnKeAAAAchECAAApAXJIAQAAcncAAAByeAAAAHKnAAAAjQoAAHMUAAAAAAECAQ4BDgEGAwoCCAYMARwCEAJ6DFdvcmQuX19zdHJfXykGTnJyAAAAcgEAAAByAQAAAEZOKQFUKQhykQAAAHKSAAAAcpMAAABysAAAAHKgAAAAcoQBAABypwAAAHLoAQAAcncAAABydwAAACkBckgBAAByeAAAAHIvAAAABQoAAHMIAAAACC4EAQ42CiNjAAAAAAAAAAAAAAAABAAAAAAAAABzRgAAAGUAWgFkAFoCZAFaA2UEZQVqBmQCgwGDAVoHZAuHAGYBZARkBYQJWghkDGQHZAiEAVoJhwBmAWQJZAqECFoKhwAEAFoLUwApDXInAAAAYZACAAAKICAgIFRva2VuIGZvciBtYXRjaGluZyBzdHJpbmdzIHRoYXQgbWF0Y2ggYSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24uCiAgICBEZWZpbmVkIHdpdGggc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiBhIGZvcm0gcmVjb2duaXplZCBieSB0aGUgaW5idWlsdCBQeXRob24gcmUgbW9kdWxlLgogICAgSWYgdGhlIGdpdmVuIHJlZ2V4IGNvbnRhaW5zIG5hbWVkIGdyb3VwcyAoZGVmaW5lZCB1c2luZyBDeyg/UDxuYW1lPi4uLil9KSwgdGhlc2Ugd2lsbCBiZSBwcmVzZXJ2ZWQgYXMgCiAgICBuYW1lZCBwYXJzZSByZXN1bHRzLgoKICAgIEV4YW1wbGU6OgogICAgICAgIHJlYWxudW0gPSBSZWdleChyIlsrLV0/XGQrXC5cZCoiKQogICAgICAgIGRhdGUgPSBSZWdleChyJyg/UDx5ZWFyPlxkezR9KS0oP1A8bW9udGg+XGRcZD8pLSg/UDxkYXk+XGRcZD8pJykKICAgICAgICAjIHJlZjogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNjczOTkvaG93LWRvLXlvdS1tYXRjaC1vbmx5LXZhbGlkLXJvbWFuLW51bWVyYWxzLXdpdGgtYS1yZWd1bGFyLWV4cHJlc3Npb24KICAgICAgICByb21hbiA9IFJlZ2V4KHIiTXswLDR9KENNfENEfEQ/Q3swLDN9KShYQ3xYTHxMP1h7MCwzfSkoSVh8SVZ8Vj9JezAsM30pIikKICAgIHoFW0EtWl1yAQAAAGMDAAAAAAAAAAMAAAALAAAAAwAAAHPeAAAAdAB0AXwAgwJqAoMAAQB0A3wBdASDAnKGfAFzLHQFagZkAXQHZAJkA40DAQB8AXwAXwh8AnwAXwl5HnQKagt8AGoIfABqCYMCfABfCnwAagh8AF8MVwBxuAQAdA1qDmsKcoIBAAEAAQB0BWoGZAR8ARYAdAdkAmQDjQMBAIIAWQBxuFgAbjJ0A3wBdAFqD4MCcrB8AXwAXwp0EHwBgwEEAHwAXwh8AF8MfAJ8AF8Jbgh0EWQFgwGCAXQSfACDAXwAXxNkBnwAahMXAHwAXxRkB3wAXxVkCHwAXxZkCVMAKQp6rVRoZSBwYXJhbWV0ZXJzIEN7cGF0dGVybn0gYW5kIEN7ZmxhZ3N9IGFyZSBwYXNzZWQgdG8gdGhlIEN7cmUuY29tcGlsZSgpfSBmdW5jdGlvbiBhcy1pcy4gU2VlIHRoZSBQeXRob24gQ3tyZX0gbW9kdWxlIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgYWNjZXB0YWJsZSBwYXR0ZXJucyBhbmQgZmxhZ3MuejBudWxsIHN0cmluZyBwYXNzZWQgdG8gUmVnZXg7IHVzZSBFbXB0eSgpIGluc3RlYWRycQAAACkBcrABAAB6JGludmFsaWQgcGF0dGVybiAoJXMpIHBhc3NlZCB0byBSZWdleHpDUmVnZXggbWF5IG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIHN0cmluZyBvciBhIGNvbXBpbGVkIFJFIG9iamVjdHoJRXhwZWN0ZWQgRlROKRdy1gEAAHInAAAAcqAAAAByegAAAHLLAAAAcrEBAABysgEAAHKzAQAA2gdwYXR0ZXJu2gVmbGFnc3JkAQAAcgoCAAByCAIAANoNc3JlX2NvbnN0YW50c9oFZXJyb3LaDmNvbXBpbGVkUkV0eXBlcnsAAAByugEAAHKEAAAAcr4AAAByYQEAAHJgAQAAclsBAAApA3KeAAAAchICAAByEwIAACkBckgBAABydwAAAHJ4AAAAcqAAAACyCgAAcy4AAAAAAg4CCgEEAQYBCgIGAQYCAgESAQwBEAEKAQoBCgIMAQYCEAEIAwgCCgEMAQYBeg5SZWdleC5fX2luaXRfX1RjBAAAAAAAAAAIAAAABQAAAEMAAABzZAAAAHwAagBqAXwBfAKDAn0EfARzInQCfAF8AnwAagN8AIMEggF8BGoEgwB9AnwEagWDAH0FdAZ8BGoHgwCDAX0GfAVyXHgYfAVEAF0QfQd8BXwHGQB8BnwHPABxSFcAfAJ8BmYCUwApAU4pCHJkAQAAcukBAAByHwAAAHJhAQAAcg4CAADaCWdyb3VwZGljdHIiAAAAcg8CAAApCHKeAAAAci0BAABymQAAAHJvAQAAcuQBAADaAWRygwAAAHLVAAAAcncAAABydwAAAHJ4AAAAcoQBAADUCgAAcxQAAAAAAQ4BBAEQAggBCAEMAQQBCgEQAXoPUmVnZXgucGFyc2VJbXBsYwEAAAAAAAAAAQAAAAsAAAADAAAAc0QAAAB5DnQAdAF8AIMCagKDAFMABAB0A2sKciIBAAEAAQBZAG4CWAB8AGoEZABrCHI+ZAF0BXwAagaDARYAfABfBHwAagRTACkCTnoHUmU6KCVzKSkHctYBAAByJwAAAHKnAAAAcksBAAByVQEAAHK4AAAAchICAAApAXKeAAAAKQFySAEAAHJ3AAAAcngAAABypwAAAOEKAABzDgAAAAABAgEOAQ4BBgIKARACeg1SZWdleC5fX3N0cl9fKQFyAQAAACkBVCkMcpEAAABykgAAAHKTAAAAcrAAAAByrgAAAHJkAQAAcgoCAAByFgIAAHKgAAAAcoQBAABypwAAAHLoAQAAcncAAABydwAAACkBckgBAAByeAAAAHInAAAApAoAAHMKAAAACAwEAQ4BDiIKDWMAAAAAAAAAAAAAAAAGAAAAAAAAAHM4AAAAZQBaAWQAWgJkAVoDZAuHAGYBZAVkBoQJWgRkDGQHZAiEAVoFhwBmAWQJZAqECFoGhwAEAFoHUwApDXIlAAAAYasFAAAKICAgIFRva2VuIGZvciBtYXRjaGluZyBzdHJpbmdzIHRoYXQgYXJlIGRlbGltaXRlZCBieSBxdW90aW5nIGNoYXJhY3RlcnMuCiAgICAKICAgIERlZmluZWQgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CiAgICAgICAgLSBxdW90ZUNoYXIgLSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVycyBkZWZpbmluZyB0aGUgcXVvdGUgZGVsaW1pdGluZyBzdHJpbmcKICAgICAgICAtIGVzY0NoYXIgLSBjaGFyYWN0ZXIgdG8gZXNjYXBlIHF1b3RlcywgdHlwaWNhbGx5IGJhY2tzbGFzaCAoZGVmYXVsdD1De05vbmV9KQogICAgICAgIC0gZXNjUXVvdGUgLSBzcGVjaWFsIHF1b3RlIHNlcXVlbmNlIHRvIGVzY2FwZSBhbiBlbWJlZGRlZCBxdW90ZSBzdHJpbmcgKHN1Y2ggYXMgU1FMJ3MgIiIgdG8gZXNjYXBlIGFuIGVtYmVkZGVkICIpIChkZWZhdWx0PUN7Tm9uZX0pCiAgICAgICAgLSBtdWx0aWxpbmUgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBxdW90ZXMgY2FuIHNwYW4gbXVsdGlwbGUgbGluZXMgKGRlZmF1bHQ9Q3tGYWxzZX0pCiAgICAgICAgLSB1bnF1b3RlUmVzdWx0cyAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXRjaGVkIHRleHQgc2hvdWxkIGJlIHVucXVvdGVkIChkZWZhdWx0PUN7VHJ1ZX0pCiAgICAgICAgLSBlbmRRdW90ZUNoYXIgLSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVycyBkZWZpbmluZyB0aGUgZW5kIG9mIHRoZSBxdW90ZSBkZWxpbWl0ZWQgc3RyaW5nIChkZWZhdWx0PUN7Tm9uZX0gPT4gc2FtZSBhcyBxdW90ZUNoYXIpCiAgICAgICAgLSBjb252ZXJ0V2hpdGVzcGFjZUVzY2FwZXMgLSBjb252ZXJ0IGVzY2FwZWQgd2hpdGVzcGFjZSAoQ3snXHQnfSwgQ3snXG4nfSwgZXRjLikgdG8gYWN0dWFsIHdoaXRlc3BhY2UgKGRlZmF1bHQ9Q3tUcnVlfSkKCiAgICBFeGFtcGxlOjoKICAgICAgICBxcyA9IFF1b3RlZFN0cmluZygnIicpCiAgICAgICAgcHJpbnQocXMuc2VhcmNoU3RyaW5nKCdsc2pkZiAiVGhpcyBpcyB0aGUgcXVvdGUiIHNsZGpmJykpCiAgICAgICAgY29tcGxleF9xcyA9IFF1b3RlZFN0cmluZygne3snLCBlbmRRdW90ZUNoYXI9J319JykKICAgICAgICBwcmludChjb21wbGV4X3FzLnNlYXJjaFN0cmluZygnbHNqZGYge3tUaGlzIGlzIHRoZSAicXVvdGUifX0gc2xkamYnKSkKICAgICAgICBzcWxfcXMgPSBRdW90ZWRTdHJpbmcoJyInLCBlc2NRdW90ZT0nIiInKQogICAgICAgIHByaW50KHNxbF9xcy5zZWFyY2hTdHJpbmcoJ2xzamRmICJUaGlzIGlzIHRoZSBxdW90ZSB3aXRoICIiZW1iZWRkZWQiIiBxdW90ZXMiIHNsZGpmJykpCiAgICBwcmludHM6OgogICAgICAgIFtbJ1RoaXMgaXMgdGhlIHF1b3RlJ11dCiAgICAgICAgW1snVGhpcyBpcyB0aGUgInF1b3RlIiddXQogICAgICAgIFtbJ1RoaXMgaXMgdGhlIHF1b3RlIHdpdGggImVtYmVkZGVkIiBxdW90ZXMnXV0KICAgIE5GVGMIAAAAAAAAAAgAAAALAAAAAwAAAHNOAgAAdAB0AYgAgwJqAoMAAQB8AWoDgwB9AXwBczB0BGoFZAF0BmQCZAONAwEAdAeDAIIBfAZkAGsIcj58AX0GbiJ8BmoDgwB9BnwGc2B0BGoFZAR0BmQCZAONAwEAdAeDAIIBfAGIAF8IdAl8AYMBiABfCnwBZAUZAIgAXwt8BogAXwx0CXwGgwGIAF8NfAKIAF8OfAOIAF8PfAWIAF8QfAeIAF8RfARy6HQSahN0EmoUQgCIAF8VZAZ0EmoWiABqCIMBdBeIAGoMZAUZAIMBfAJkAGsJctx0F3wCgwFw3mQHZgMWAIgAXxhuPGQFiABfFWQIdBJqFogAagiDAXQXiABqDGQFGQCDAXwCZABrCZABchp0F3wCgwGQAXAcZAdmAxYAiABfGHQJiABqDIMBZAlrBJABcnCIAAQAahhkCmQLahmHAGYBZAxkDYQIdBp0CYgAagyDAWQJGABkBWQXgwNEAIMBgwEXAGQOFwA3AAIAXxh8A5ABco6IAAQAahhkD3QSahZ8A4MBFgA3AAIAXxh8ApABcr6IAAQAahhkEHQSahZ8AoMBFgA3AAIAXxh0EmoWiABqDoMBZBEXAIgAXxuIAAQAahhkEnQSahaIAGoMgwEWADcAAgBfGHkedBJqHIgAahiIAGoVgwKIAF8SiABqGIgAXx1XAG4wBAB0HmofawqQAnImAQABAAEAdARqBWQTiABqGBYAdAZkAmQDjQMBAIIAWQBuAlgAdCCIAIMBiABfIWQUiABqIRcAiABfImQViABfI2QWiABfJGQAUwApGE56JHF1b3RlQ2hhciBjYW5ub3QgYmUgdGhlIGVtcHR5IHN0cmluZ3JxAAAAKQFysAEAAHonZW5kUXVvdGVDaGFyIGNhbm5vdCBiZSB0aGUgZW1wdHkgc3RyaW5ncgEAAAB6DCVzKD86W14lcyVzXXKWAAAAehAlcyg/OlteJXNcblxyJXNdcnIAAAB6BHwoPzp6BSl8KD86YwEAAAAAAAAAAgAAAAYAAAAzAAAAczQAAAB8AF0sfQFkAHQAagGIAGoCZAF8AYUCGQCDAXQDiABqAnwBGQCDAWYCFgBWAAEAcQJkAVMAKQJ6ByVzW14lc11OKQRyZAEAAHIJAgAA2gxlbmRRdW90ZUNoYXJyBwIAACkCcoUAAABytgAAACkBcp4AAABydwAAAHJ4AAAAcocAAAAvCwAAcwIAAAAEAnooUXVvdGVkU3RyaW5nLl9faW5pdF9fLjxsb2NhbHM+LjxnZW5leHByPvoBKXoHfCg/OiVzKXoIfCg/OiVzLil6AyguKXoEKSolc3okaW52YWxpZCBwYXR0ZXJuICglcykgcGFzc2VkIHRvIFJlZ2V4eglFeHBlY3RlZCBGVHJzAAAAKSVy1gEAAHIlAAAAcqAAAAByqwAAAHKxAQAAcrIBAAByswEAANoLU3ludGF4RXJyb3LaCXF1b3RlQ2hhcnLYAAAA2gxxdW90ZUNoYXJMZW7aDmZpcnN0UXVvdGVDaGFychkCAADaD2VuZFF1b3RlQ2hhckxlbtoHZXNjQ2hhctoIZXNjUXVvdGXaDnVucXVvdGVSZXN1bHRz2hhjb252ZXJ0V2hpdGVzcGFjZUVzY2FwZXNyZAEAANoJTVVMVElMSU5F2gZET1RBTExyEwIAAHIJAgAAcgcCAAByEgIAAHKqAAAActkAAADaFWVzY0NoYXJSZXBsYWNlUGF0dGVybnIKAgAAcggCAAByFAIAAHIVAgAAcoQAAAByvgAAAHJhAQAAcmABAAByWwEAACkIcp4AAAByHAIAAHIgAgAAciECAABaCW11bHRpbGluZXIiAgAAchkCAAByIwIAACkBckgBAAApAXKeAAAAcngAAAByoAAAAAYLAABzZgAAAAABDgMIAQQBEAEGAggBBgIIAQQBEAEGAgYBCgEKAQYBCgEGAQYBBgEGAgQBDgECAQoBDAEcAgYBAgEKAQwBHgEQAQYDNgIGARgBBgEYARIBGgICARIBDAESAQwBCgEIAgoBDAEGAXoVUXVvdGVkU3RyaW5nLl9faW5pdF9fYwQAAAAAAAAACQAAAAUAAABDAAAAc9gAAAB8AXwCGQB8AGoAawJyHHwAagFqAnwBfAKDAnAeZAB9BHwEczR0A3wBfAJ8AGoEfACDBIIBfARqBYMAfQJ8BGoGgwB9BXwAagdy0HwFfABqCHwAagkLAIUCGQB9BXQKfAV0C4MCctBkAXwFawZypHwAagxypGQCZANkBGQFZAacBH0GeCB8BmoNgwBEAF0UXAJ9B30IfAVqDnwHfAiDAn0FcYxXAHwAag9yunQBahB8AGoRZAd8BYMDfQV8AGoSctB8BWoOfABqEnwAahODAn0FfAJ8BWYCUwApCE76AVz6AQlyEQEAAPoBDPoBDSkEegJcdHoCXG56AlxmegJccnoFXGc8MT4pFHIeAgAAcmQBAABy6QEAAHIfAAAAcmEBAAByDgIAAHIPAgAAciICAAByHQIAAHIfAgAAcnoAAAByywAAAHIjAgAActwAAAByjQAAAHIgAgAActYAAAByJgIAAHIhAgAAchkCAAApCXKeAAAAci0BAABymQAAAHJvAQAAcuQBAABygwAAAFoGd3NfbWFwWgV3c2xpdFoGd3NjaGFycncAAABydwAAAHJ4AAAAcoQBAABHCwAAcygAAAAAASABBAEQAggBCAIGAxICCgIOAgIBAgECAQgCEgEQAwYBEAMGARACehZRdW90ZWRTdHJpbmcucGFyc2VJbXBsYwEAAAAAAAAAAQAAAAsAAAADAAAAc0YAAAB5DnQAdAF8AIMCagKDAFMABAB0A2sKciIBAAEAAQBZAG4CWAB8AGoEZABrCHJAZAF8AGoFfABqBmYCFgB8AF8EfABqBFMAKQJOei5xdW90ZWQgc3RyaW5nLCBzdGFydGluZyB3aXRoICVzIGVuZGluZyB3aXRoICVzKQdy1gEAAHIlAAAAcqcAAABySwEAAHJVAQAAchwCAAByGQIAACkBcp4AAAApAXJIAQAAcncAAAByeAAAAHKnAAAAagsAAHMOAAAAAAECAQ4BDgEGAgoBEgJ6FFF1b3RlZFN0cmluZy5fX3N0cl9fKQZOTkZUTlQpAVQpCHKRAAAAcpIAAABykwAAAHKwAAAAcqAAAAByhAEAAHKnAAAAcugBAABydwAAAHJ3AAAAKQFySAEAAHJ4AAAAciUAAADtCgAAcwgAAAAIGAQBDkEKI2MAAAAAAAAAAAAAAAAEAAAAAAAAAHM4AAAAZQBaAWQAWgJkAVoDZAuHAGYBZARkBYQJWgRkDGQHZAiEAVoFhwBmAWQJZAqECFoGhwAEAFoHUwApDXIJAAAAYfQCAAAKICAgIFRva2VuIGZvciBtYXRjaGluZyB3b3JkcyBjb21wb3NlZCBvZiBjaGFyYWN0ZXJzIEl7bm90fSBpbiBhIGdpdmVuIHNldCAod2lsbAogICAgaW5jbHVkZSB3aGl0ZXNwYWNlIGluIG1hdGNoZWQgY2hhcmFjdGVycyBpZiBub3QgbGlzdGVkIGluIHRoZSBwcm92aWRlZCBleGNsdXNpb24gc2V0IC0gc2VlIGV4YW1wbGUpLgogICAgRGVmaW5lZCB3aXRoIHN0cmluZyBjb250YWluaW5nIGFsbCBkaXNhbGxvd2VkIGNoYXJhY3RlcnMsIGFuZCBhbiBvcHRpb25hbAogICAgbWluaW11bSwgbWF4aW11bSwgYW5kL29yIGV4YWN0IGxlbmd0aC4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBDe21pbn0gaXMgMSAoYQogICAgbWluaW11bSB2YWx1ZSA8IDEgaXMgbm90IHZhbGlkKTsgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBDe21heH0gYW5kIEN7ZXhhY3R9CiAgICBhcmUgMCwgbWVhbmluZyBubyBtYXhpbXVtIG9yIGV4YWN0IGxlbmd0aCByZXN0cmljdGlvbi4KCiAgICBFeGFtcGxlOjoKICAgICAgICAjIGRlZmluZSBhIGNvbW1hLXNlcGFyYXRlZC12YWx1ZSBhcyBhbnl0aGluZyB0aGF0IGlzIG5vdCBhICcsJwogICAgICAgIGNzdl92YWx1ZSA9IENoYXJzTm90SW4oJywnKQogICAgICAgIHByaW50KGRlbGltaXRlZExpc3QoY3N2X3ZhbHVlKS5wYXJzZVN0cmluZygiZGtscyxsc2RramYsczEyIDM0LEAhIywyMTMiKSkKICAgIHByaW50czo6CiAgICAgICAgWydka2xzJywgJ2xzZGtqZicsICdzMTIgMzQnLCAnQCEjJywgJzIxMyddCiAgICBycgAAAHIBAAAAYwUAAAAAAAAABQAAAAMAAAADAAAAc4YAAAB0AHQBfACDAmoCgwABAGQBfABfA3wBfABfBHwCZAJrAHIqdAVkA4MBggF8AnwAXwZ8A2QEawRyQHwDfABfB24GdAh8AF8HfARkBGsEclp8BHwAXwd8BHwAXwZ0CXwAgwF8AF8KZAV8AGoKFwB8AF8LfABqBmQEawJ8AF8MZAF8AF8NZABTACkGTkZycgAAAHpmY2Fubm90IHNwZWNpZnkgYSBtaW5pbXVtIGxlbmd0aCA8IDE7IHVzZSBPcHRpb25hbChDaGFyc05vdEluKCkpIGlmIHplcm8tbGVuZ3RoIGNoYXIgZ3JvdXAgaXMgcGVybWl0dGVkcgEAAAB6CUV4cGVjdGVkICkOctYBAAByCQAAAHKgAAAAclgBAADaCG5vdENoYXJzcroBAAByBAIAAHIFAgAAcucBAAByhAAAAHK+AAAAcmEBAAByWwEAAHJgAQAAKQVyngAAAHIrAgAAcgsCAAByDAIAAHINAgAAKQFySAEAAHJ3AAAAcngAAAByoAAAAIYLAABzIAAAAAABDgEGAQYCCAEIAgYCCAEIAgYCCAEGAQYCCgEMAQwBehNDaGFyc05vdEluLl9faW5pdF9fVGMEAAAAAAAAAAcAAAAFAAAAQwAAAHOUAAAAfAF8AhkAfABqAGsGch50AXwBfAJ8AGoCfACDBIIBfAJ9BHwCZAE3AH0CfABqAH0FdAN8BHwAagQXAHQFfAGDAYMCfQZ4IHwCfAZrAHJkfAF8AhkAfAVrB3JkfAJkATcAfQJxRlcAfAJ8BBgAfABqBmsAcoR0AXwBfAJ8AGoCfACDBIIBfAJ8AXwEfAKFAhkAZgJTACkCTnJyAAAAKQdyKwIAAHIfAAAAcmEBAAByCwIAAHIFAgAActgAAAByBAIAACkHcp4AAAByLQEAAHKZAAAAcm8BAABy+QEAAFoIbm90Y2hhcnPaBm1heGxlbnJ3AAAAcncAAAByeAAAAHKEAQAAngsAAHMYAAAAAAEOARACBAEIAQYBFAEKAQwBDAIOARACehRDaGFyc05vdEluLnBhcnNlSW1wbGMBAAAAAAAAAAEAAAAMAAAAAwAAAHNkAAAAeQ50AHQBfACDAmoCgwBTAAQAdANrCnIiAQABAAEAWQBuAlgAfABqBGQAawhyXnQFfABqBoMBZAFrBHJSZAJ8AGoGZABkAYUCGQAWAHwAXwRuDGQDfABqBhYAfABfBHwAagRTACkETnIQAgAAegohVzooJXMuLi4pegchVzooJXMpKQdy1gEAAHIJAAAAcqcAAABySwEAAHJVAQAActgAAAByKwIAACkBcp4AAAApAXJIAQAAcncAAAByeAAAAHKnAAAArwsAAHMSAAAAAAECAQ4BDgEGAgoBDgEWAgwCehJDaGFyc05vdEluLl9fc3RyX18pA3JyAAAAcgEAAAByAQAAACkBVCkIcpEAAABykgAAAHKTAAAAcrAAAAByoAAAAHKEAQAAcqcAAABy6AEAAHJ3AAAAcncAAAApAXJIAQAAcngAAAByCQAAAHYLAABzCAAAAAgPBAEOGAoRYwAAAAAAAAAAAAAAAAYAAAAAAAAAczwAAABlAFoBZABaAmQBWgNkAmQDZARkBWQGZAecBVoEZBCHAGYBZAtkDIQJWgVkEWQOZA+EAVoGhwAEAFoHUwApEnIuAAAAYY8BAAAKICAgIFNwZWNpYWwgbWF0Y2hpbmcgY2xhc3MgZm9yIG1hdGNoaW5nIHdoaXRlc3BhY2UuICBOb3JtYWxseSwgd2hpdGVzcGFjZSBpcyBpZ25vcmVkCiAgICBieSBweXBhcnNpbmcgZ3JhbW1hcnMuICBUaGlzIGNsYXNzIGlzIGluY2x1ZGVkIHdoZW4gc29tZSB3aGl0ZXNwYWNlIHN0cnVjdHVyZXMKICAgIGFyZSBzaWduaWZpY2FudC4gIERlZmluZSB3aXRoIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byBiZQogICAgbWF0Y2hlZDsgZGVmYXVsdCBpcyBDeyIgXHRcclxuIn0uICBBbHNvIHRha2VzIG9wdGlvbmFsIEN7bWlufSwgQ3ttYXh9LCBhbmQgQ3tleGFjdH0gYXJndW1lbnRzLAogICAgYXMgZGVmaW5lZCBmb3IgdGhlIEN7THtXb3JkfX0gY2xhc3MuCiAgICB6BTxTUEM+egU8VEFCPnoEPExGPnoEPENSPnoEPEZGPikFct8BAAByKAIAAHIRAQAAcioCAAByKQIAAPoEIAkNCnJyAAAAcgEAAABjBQAAAAAAAAAFAAAABQAAAAMAAABzkgAAAHQAdAGIAIMCagKDAAEAfAGIAF8DiABqBGQBagWHAGYBZAJkA4QIiABqBkQAgwGDAYMBAQBkAWoFZARkA4QAiABqA0QAgwGDAYgAXwdkBYgAXwhkBogAagcXAIgAXwl8AogAXwp8A2QHawRydHwDiABfC24GdAyIAF8LfARkB2sEco58BIgAXwt8BIgAXwpkAFMAKQhOcpYAAABjAQAAAAAAAAACAAAAAwAAADMAAABzHAAAAHwAXRR9AXwBiABqAGsHcgJ8AVYAAQBxAmQAUwApAU4pAdoKbWF0Y2hXaGl0ZSkCcoUAAABymAAAACkBcp4AAABydwAAAHJ4AAAAcocAAADPCwAAcwIAAAAEAHohV2hpdGUuX19pbml0X18uPGxvY2Fscz4uPGdlbmV4cHI+YwEAAAAAAAAAAgAAAAMAAABzAAAAcxgAAAB8AF0QfQF0AGoBfAEZAFYAAQBxAmQAUwApAU4pAnIuAAAA2gl3aGl0ZVN0cnMpAnKFAAAAcpgAAABydwAAAHJ3AAAAcngAAAByhwAAANELAABzAgAAAAQAVHoJRXhwZWN0ZWQgcgEAAAApDXLWAQAAci4AAAByoAAAAHIuAgAAcscBAAByqgAAAHJZAQAAcr4AAAByWwEAAHJhAQAAcgQCAAByBQIAAHLnAQAAKQVyngAAAFoCd3NyCwIAAHIMAgAAcg0CAAApAXJIAQAAKQFyngAAAHJ4AAAAcqAAAADMCwAAcxoAAAAAAQ4BBgEgAhgBBgEMAgYCCAEIAgYCCAEGAXoOV2hpdGUuX19pbml0X19UYwQAAAAAAAAABgAAAAUAAABDAAAAc5QAAAB8AXwCGQB8AGoAawdyHnQBfAF8AnwAagJ8AIMEggF8An0EfAJkATcAfQJ8BHwAagMXAH0FdAR8BXQFfAGDAYMCfQV4InwCfAVrAHJkfAF8AhkAfABqAGsGcmR8AmQBNwB9AnFEVwB8AnwEGAB8AGoGawByhHQBfAF8AnwAagJ8AIMEggF8AnwBfAR8AoUCGQBmAlMAKQJOcnIAAAApB3IuAgAAch8AAAByYQEAAHIFAgAAcgsCAABy2AAAAHIEAgAAKQZyngAAAHItAQAAcpkAAABybwEAAHL5AQAAcvoBAABydwAAAHJ3AAAAcngAAAByhAEAAOALAABzFgAAAAABDgEQAQQBCAEKAQ4BGAEMAg4BEAJ6D1doaXRlLnBhcnNlSW1wbCkEci0CAABycgAAAHIBAAAAcgEAAAApAVQpCHKRAAAAcpIAAABykwAAAHKwAAAAci8CAAByoAAAAHKEAQAAcugBAABydwAAAHJ3AAAAKQFySAEAAHJ4AAAAci4AAAC9CwAAcxAAAAAIBwQCAgECAQIBAgEIAg4UYwAAAAAAAAAAAAAAAAMAAAAAAAAAcxwAAABlAFoBZABaAocAZgFkAWQChAhaA4cABABaBFMAKQPaDl9Qb3NpdGlvblRva2VuYwEAAAAAAAAAAQAAAAMAAAADAAAAcygAAAB0AHQBfACDAmoCgwABAHwAagNqBHwAXwVkAXwAXwZkAnwAXwdkAFMAKQNOVEYpCHLWAQAAcjACAAByoAAAAHJIAQAAcpEAAAByvgAAAHJbAQAAcmABAAApAXKeAAAAKQFySAEAAHJ3AAAAcngAAAByoAAAAPELAABzCAAAAAABDgEKAQYBehdfUG9zaXRpb25Ub2tlbi5fX2luaXRfXykFcpEAAABykgAAAHKTAAAAcqAAAABy6AEAAHJ3AAAAcncAAAApAXJIAQAAcngAAAByMAIAAPALAABzAgAAAAgBcjACAABjAAAAAAAAAAAAAAAAAwAAAAAAAABzMgAAAGUAWgFkAFoCZAFaA4cAZgFkAmQDhAhaBGQEZAWEAFoFZAlkB2QIhAFaBocABABaB1MAKQpyEAAAAHpiCiAgICBUb2tlbiB0byBhZHZhbmNlIHRvIGEgc3BlY2lmaWMgY29sdW1uIG9mIGlucHV0IHRleHQ7IHVzZWZ1bCBmb3IgdGFidWxhciByZXBvcnQgc2NyYXBpbmcuCiAgICBjAgAAAAAAAAACAAAAAwAAAAMAAABzGAAAAHQAdAF8AIMCagKDAAEAfAF8AF8DZABTACkBTikEctYBAAByEAAAAHKgAAAAcjkAAAApAnKeAAAA2gVjb2xubykBckgBAABydwAAAHJ4AAAAcqAAAAD7CwAAcwQAAAAAAQ4BehNHb1RvQ29sdW1uLl9faW5pdF9fYwMAAAAAAAAABAAAAAMAAABDAAAAc2AAAAB0AHwCfAGDAnwAagBrA3JcdAF8AYMBfQN8AGoCcip8AGoDfAF8AoMCfQJ4MHwCfANrAHJafAF8AhkAagSDAHJadAB8AnwBgwJ8AGoAawNyWnwCZAE3AH0CcSxXAHwCUwApAk5ycgAAACkFcjkAAABy2AAAAHJdAQAAcoEBAADaB2lzc3BhY2UpBHKeAAAAci0BAABymQAAAHKCAQAAcncAAABydwAAAHJ4AAAAcoMBAAD/CwAAcw4AAAAAARABCAEGAQwBJgEMAXoTR29Ub0NvbHVtbi5wcmVQYXJzZVRjBAAAAAAAAAAHAAAABQAAAEMAAABzRAAAAHQAfAJ8AYMCfQR8BHwAagBrBHIidAF8AXwCZAF8AIMEggF8AnwAagAXAHwEGAB9BXwBfAJ8BYUCGQB9BnwFfAZmAlMAKQJOehtUZXh0IG5vdCBpbiBleHBlY3RlZCBjb2x1bW4pAnI5AAAAch8AAAApB3KeAAAAci0BAABymQAAAHJvAQAAWgd0aGlzY29sWgZuZXdsb2NygwAAAHJ3AAAAcncAAAByeAAAAHKEAQAACAwAAHMMAAAAAAEKAQoBDgEOAQwBehRHb1RvQ29sdW1uLnBhcnNlSW1wbCkBVCkIcpEAAABykgAAAHKTAAAAcrAAAAByoAAAAHKDAQAAcoQBAABy6AEAAHJ3AAAAcncAAAApAXJIAQAAcngAAAByEAAAAPcLAABzCAAAAAgDBAEMBAgJYwAAAAAAAAAAAAAAAAMAAAAAAAAAcyoAAABlAFoBZABaAmQBWgOHAGYBZAJkA4QIWgRkB2QFZAaEAVoFhwAEAFoGUwApCHIUAAAAYb8BAAAKICAgIE1hdGNoZXMgaWYgY3VycmVudCBwb3NpdGlvbiBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSB3aXRoaW4gdGhlIHBhcnNlIHN0cmluZwogICAgCiAgICBFeGFtcGxlOjoKICAgIAogICAgICAgIHRlc3QgPSAnJycgICAgICAgIEFBQSB0aGlzIGxpbmUKICAgICAgICBBQUEgYW5kIHRoaXMgbGluZQogICAgICAgICAgQUFBIGJ1dCBub3QgdGhpcyBvbmUKICAgICAgICBCIEFBQSBhbmQgZGVmaW5pdGVseSBub3QgdGhpcyBvbmUKICAgICAgICAnJycKCiAgICAgICAgZm9yIHQgaW4gKExpbmVTdGFydCgpICsgJ0FBQScgKyByZXN0T2ZMaW5lKS5zZWFyY2hTdHJpbmcodGVzdCk6CiAgICAgICAgICAgIHByaW50KHQpCiAgICAKICAgIFByaW50czo6CiAgICAgICAgWydBQUEnLCAnIHRoaXMgbGluZSddCiAgICAgICAgWydBQUEnLCAnIGFuZCB0aGlzIGxpbmUnXSAgICAKCiAgICBjAQAAAAAAAAABAAAAAwAAAAMAAABzGAAAAHQAdAF8AIMCagKDAAEAZAF8AF8DZABTACkCTnoWRXhwZWN0ZWQgc3RhcnQgb2YgbGluZSkEctYBAAByFAAAAHKgAAAAcmEBAAApAXKeAAAAKQFySAEAAHJ3AAAAcngAAAByoAAAACYMAABzBAAAAAABDgF6EkxpbmVTdGFydC5fX2luaXRfX1RjBAAAAAAAAAAEAAAABQAAAEMAAABzKgAAAHQAfAJ8AYMCZAFrAnIWfAJnAGYCUwB0AXwBfAJ8AGoCfACDBIIBZABTACkCTnJyAAAAKQNyOQAAAHIfAAAAcmEBAAApBHKeAAAAci0BAABymQAAAHJvAQAAcncAAABydwAAAHJ4AAAAcoQBAAAqDAAAcwYAAAAAAQ4BCAF6E0xpbmVTdGFydC5wYXJzZUltcGwpAVQpB3KRAAAAcpIAAABykwAAAHKwAAAAcqAAAAByhAEAAHLoAQAAcncAAABydwAAACkBckgBAAByeAAAAHIUAAAAEQwAAHMGAAAACBQEAQwEYwAAAAAAAAAAAAAAAAMAAAAAAAAAcyoAAABlAFoBZABaAmQBWgOHAGYBZAJkA4QIWgRkB2QFZAaEAVoFhwAEAFoGUwApCHITAAAAelUKICAgIE1hdGNoZXMgaWYgY3VycmVudCBwb3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgbGluZSB3aXRoaW4gdGhlIHBhcnNlIHN0cmluZwogICAgYwEAAAAAAAAAAQAAAAQAAAADAAAAcywAAAB0AHQBfACDAmoCgwABAHwAagN0BGoFagZkAWQCgwKDAQEAZAN8AF8HZABTACkETnIRAQAAcpYAAAB6FEV4cGVjdGVkIGVuZCBvZiBsaW5lKQhy1gEAAHITAAAAcqAAAAByxwEAAHIkAAAAck4BAAByjQAAAHJhAQAAKQFyngAAACkBckgBAABydwAAAHJ4AAAAcqAAAAAzDAAAcwYAAAAAAQ4BFAF6EExpbmVFbmQuX19pbml0X19UYwQAAAAAAAAABAAAAAUAAABDAAAAc2IAAAB8AnQAfAGDAWsAcjZ8AXwCGQBkAWsCciR8AmQCFwBkAWYCUwB0AXwBfAJ8AGoCfACDBIIBbih8AnQAfAGDAWsCck58AmQCFwBnAGYCUwB0AXwBfAJ8AGoCfACDBIIBZABTACkDTnIRAQAAcnIAAAApA3LYAAAAch8AAAByYQEAACkEcp4AAAByLQEAAHKZAAAAcm8BAABydwAAAHJ3AAAAcngAAAByhAEAADgMAABzDgAAAAABDAEMAQwCEgEMAQwCehFMaW5lRW5kLnBhcnNlSW1wbCkBVCkHcpEAAABykgAAAHKTAAAAcrAAAAByoAAAAHKEAQAAcugBAABydwAAAHJ3AAAAKQFySAEAAHJ4AAAAchMAAAAvDAAAcwYAAAAIAwQBDAVjAAAAAAAAAAAAAAAAAwAAAAAAAABzKgAAAGUAWgFkAFoCZAFaA4cAZgFkAmQDhAhaBGQHZAVkBoQBWgWHAAQAWgZTACkIcioAAAB6TQogICAgTWF0Y2hlcyBpZiBjdXJyZW50IHBvc2l0aW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhcnNlIHN0cmluZwogICAgYwEAAAAAAAAAAQAAAAMAAAADAAAAcxgAAAB0AHQBfACDAmoCgwABAGQBfABfA2QAUwApAk56FkV4cGVjdGVkIHN0YXJ0IG9mIHRleHQpBHLWAQAAcioAAAByoAAAAHJhAQAAKQFyngAAACkBckgBAABydwAAAHJ4AAAAcqAAAABHDAAAcwQAAAAAAQ4BehRTdHJpbmdTdGFydC5fX2luaXRfX1RjBAAAAAAAAAAEAAAABQAAAEMAAABzMAAAAHwCZAFrA3IofAJ8AGoAfAFkAYMCawNyKHQBfAF8AnwAagJ8AIMEggF8AmcAZgJTACkCTnIBAAAAKQNygwEAAHIfAAAAcmEBAAApBHKeAAAAci0BAABymQAAAHJvAQAAcncAAABydwAAAHJ4AAAAcoQBAABLDAAAcwgAAAAAAQgCEAEQAXoVU3RyaW5nU3RhcnQucGFyc2VJbXBsKQFUKQdykQAAAHKSAAAAcpMAAABysAAAAHKgAAAAcoQBAABy6AEAAHJ3AAAAcncAAAApAXJIAQAAcngAAAByKgAAAEMMAABzBgAAAAgDBAEMBGMAAAAAAAAAAAAAAAADAAAAAAAAAHMqAAAAZQBaAWQAWgJkAVoDhwBmAWQCZAOECFoEZAdkBWQGhAFaBYcABABaBlMAKQhyKQAAAHpHCiAgICBNYXRjaGVzIGlmIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiB0aGUgcGFyc2Ugc3RyaW5nCiAgICBjAQAAAAAAAAABAAAAAwAAAAMAAABzGAAAAHQAdAF8AIMCagKDAAEAZAF8AF8DZABTACkCTnoURXhwZWN0ZWQgZW5kIG9mIHRleHQpBHLWAQAAcikAAAByoAAAAHJhAQAAKQFyngAAACkBckgBAABydwAAAHJ4AAAAcqAAAABWDAAAcwQAAAAAAQ4BehJTdHJpbmdFbmQuX19pbml0X19UYwQAAAAAAAAABAAAAAUAAABDAAAAc14AAAB8AnQAfAGDAWsAch50AXwBfAJ8AGoCfACDBIIBbjx8AnQAfAGDAWsCcjZ8AmQBFwBnAGYCUwB8AnQAfAGDAWsEckp8AmcAZgJTAHQBfAF8AnwAagJ8AIMEggFkAFMAKQJOcnIAAAApA3LYAAAAch8AAAByYQEAACkEcp4AAAByLQEAAHKZAAAAcm8BAABydwAAAHJ3AAAAcngAAAByhAEAAFoMAABzDgAAAAABDAESAQwBDAEMAQgCehNTdHJpbmdFbmQucGFyc2VJbXBsKQFUKQdykQAAAHKSAAAAcpMAAABysAAAAHKgAAAAcoQBAABy6AEAAHJ3AAAAcncAAAApAXJIAQAAcngAAAByKQAAAFIMAABzBgAAAAgDBAEMBGMAAAAAAAAAAAAAAAAEAAAAAAAAAHMuAAAAZQBaAWQAWgJkAVoDZQRmAYcAZgFkAmQDhAlaBWQHZAVkBoQBWgaHAAQAWgdTACkIcjEAAABhcAEAAAogICAgTWF0Y2hlcyBpZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgV29yZCwgYW5kCiAgICBpcyBub3QgcHJlY2VkZWQgYnkgYW55IGNoYXJhY3RlciBpbiBhIGdpdmVuIHNldCBvZiBDe3dvcmRDaGFyc30KICAgIChkZWZhdWx0PUN7cHJpbnRhYmxlc30pLiBUbyBlbXVsYXRlIHRoZSBDewh9IGJlaGF2aW9yIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMsCiAgICB1c2UgQ3tXb3JkU3RhcnQoYWxwaGFudW1zKX0uIEN7V29yZFN0YXJ0fSB3aWxsIGFsc28gbWF0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZgogICAgdGhlIHN0cmluZyBiZWluZyBwYXJzZWQsIG9yIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgogICAgYwIAAAAAAAAAAgAAAAMAAAADAAAAcyIAAAB0AHQBfACDAmoCgwABAHQDfAGDAXwAXwRkAXwAXwVkAFMAKQJOehpOb3QgYXQgdGhlIHN0YXJ0IG9mIGEgd29yZCkGctYBAAByMQAAAHKgAAAAco8BAADaCXdvcmRDaGFyc3JhAQAAKQJyngAAAHIzAgAAKQFySAEAAHJ3AAAAcngAAAByoAAAAGwMAABzBgAAAAABDgEKAXoSV29yZFN0YXJ0Ll9faW5pdF9fVGMEAAAAAAAAAAQAAAAFAAAAQwAAAHNAAAAAfAJkAWsDcjh8AXwCZAIYABkAfABqAGsGcyh8AXwCGQB8AGoAawdyOHQBfAF8AnwAagJ8AIMEggF8AmcAZgJTACkDTnIBAAAAcnIAAAApA3IzAgAAch8AAAByYQEAACkEcp4AAAByLQEAAHKZAAAAcm8BAABydwAAAHJ3AAAAcngAAAByhAEAAHEMAABzCgAAAAABCAESAQ4BEAF6E1dvcmRTdGFydC5wYXJzZUltcGwpAVQpCHKRAAAAcpIAAABykwAAAHKwAAAAclYAAAByoAAAAHKEAQAAcugBAABydwAAAHJ3AAAAKQFySAEAAHJ4AAAAcjEAAABkDAAAcwYAAAAIBwQBEAVjAAAAAAAAAAAAAAAABAAAAAAAAABzLgAAAGUAWgFkAFoCZAFaA2UEZgGHAGYBZAJkA4QJWgVkB2QFZAaEAVoGhwAEAFoHUwApCHIwAAAAYVoBAAAKICAgIE1hdGNoZXMgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBhIFdvcmQsIGFuZAogICAgaXMgbm90IGZvbGxvd2VkIGJ5IGFueSBjaGFyYWN0ZXIgaW4gYSBnaXZlbiBzZXQgb2YgQ3t3b3JkQ2hhcnN9CiAgICAoZGVmYXVsdD1De3ByaW50YWJsZXN9KS4gVG8gZW11bGF0ZSB0aGUgQ3sIfSBiZWhhdmlvciBvZiByZWd1bGFyIGV4cHJlc3Npb25zLAogICAgdXNlIEN7V29yZEVuZChhbHBoYW51bXMpfS4gQ3tXb3JkRW5kfSB3aWxsIGFsc28gbWF0Y2ggYXQgdGhlIGVuZCBvZgogICAgdGhlIHN0cmluZyBiZWluZyBwYXJzZWQsIG9yIGF0IHRoZSBlbmQgb2YgYSBsaW5lLgogICAgYwIAAAAAAAAAAgAAAAMAAAADAAAAcygAAAB0AHQBfACDAmoCgwABAHQDfAGDAXwAXwRkAXwAXwVkAnwAXwZkAFMAKQNORnoYTm90IGF0IHRoZSBlbmQgb2YgYSB3b3JkKQdy1gEAAHIwAAAAcqAAAAByjwEAAHIzAgAAclgBAAByYQEAACkCcp4AAAByMwIAACkBckgBAABydwAAAHJ4AAAAcqAAAACADAAAcwgAAAAAAQ4BCgEGAXoQV29yZEVuZC5fX2luaXRfX1RjBAAAAAAAAAAFAAAABQAAAEMAAABzUAAAAHQAfAGDAX0EfARkAWsEckh8AnwEawBySHwBfAIZAHwAagFrBnM4fAF8AmQCGAAZAHwAagFrB3JIdAJ8AXwCfABqA3wAgwSCAXwCZwBmAlMAKQNOcgEAAABycgAAACkEctgAAAByMwIAAHIfAAAAcmEBAAApBXKeAAAAci0BAABymQAAAHJvAQAAcoIBAABydwAAAHJ3AAAAcngAAAByhAEAAIYMAABzDAAAAAABCAEQAQ4BEgEQAXoRV29yZEVuZC5wYXJzZUltcGwpAVQpCHKRAAAAcpIAAABykwAAAHKwAAAAclYAAAByoAAAAHKEAQAAcugBAABydwAAAHJ3AAAAKQFySAEAAHJ4AAAAcjAAAAB4DAAAcwYAAAAIBwQBEAZjAAAAAAAAAAAAAAAABAAAAAAAAABzhAAAAGUAWgFkAFoCZAFaA2QXhwBmAWQDZASECVoEZAVkBoQAWgVkB2QIhABaBmQJZAqEAFoHhwBmAWQLZAyECFoIhwBmAWQNZA6ECFoJhwBmAWQPZBCECFoKZBiHAGYBZBFkEoQJWgtnAGYBZBNkFIQBWgyHAGYBZBVkFoQIWg2HAAQAWg5TACkZciAAAAB6XgogICAgQWJzdHJhY3Qgc3ViY2xhc3Mgb2YgUGFyc2VyRWxlbWVudCwgZm9yIGNvbWJpbmluZyBhbmQgcG9zdC1wcm9jZXNzaW5nIHBhcnNlZCB0b2tlbnMuCiAgICBGYwMAAAAAAAAAAwAAAAsAAAADAAAAc7AAAAB0AHQBfACDAmoCfAKDAQEAdAN8AXQEgwJyInQFfAGDAX0BdAN8AXQGgwJyPHQHagh8AYMBZwF8AF8Jbmp0A3wBdApqC4MCcnp0BXwBgwF9AXQMZAFkAoQAfAFEAIMBgwFybnQNdAdqCHwBgwJ9AXQFfAGDAXwAXwluLHkOdAV8AYMBfABfCVcAbhwEAHQOawpypAEAAQABAHwBZwF8AF8JWQBuAlgAZAN8AF8PZABTACkETmMBAAAAAAAAAAIAAAAEAAAAcwAAAHMYAAAAfABdEH0BdAB8AXQBgwJWAAEAcQJkAFMAKQFOKQJyegAAAHLLAAAAKQJyhQAAAHIuAQAAcncAAABydwAAAHJ4AAAAcocAAACdDAAAcwIAAAAEAHorUGFyc2VFeHByZXNzaW9uLl9faW5pdF9fLjxsb2NhbHM+LjxnZW5leHByPkYpEHLWAQAAciAAAAByoAAAAHJ6AAAAcsgAAAByxgAAAHLLAAAAciQAAAByUQEAANoFZXhwcnNymQEAANoISXRlcmFibGXaA2FsbHJ2AQAAcs4AAAByZQEAACkDcp4AAAByNAIAAHJnAQAAKQFySAEAAHJ3AAAAcngAAAByoAAAAJMMAABzHgAAAAABEAEKAQgCCgEQAQwBCAISAQwBDAICAQ4BDgEOAXoYUGFyc2VFeHByZXNzaW9uLl9faW5pdF9fYwIAAAAAAAAAAgAAAAIAAABDAAAAcwoAAAB8AGoAfAEZAFMAKQFOKQFyNAIAACkCcp4AAABytgAAAHJ3AAAAcncAAAByeAAAAHK3AAAApwwAAHMCAAAAAAF6G1BhcnNlRXhwcmVzc2lvbi5fX2dldGl0ZW1fX2MCAAAAAAAAAAIAAAACAAAAQwAAAHMWAAAAfABqAGoBfAGDAQEAZAB8AF8CfABTACkBTikDcjQCAABy+wAAAHJVAQAAKQJyngAAAHL/AAAAcncAAABydwAAAHJ4AAAAcvsAAACqDAAAcwYAAAAAAQwBBgF6FlBhcnNlRXhwcmVzc2lvbi5hcHBlbmRjAQAAAAAAAAACAAAAAgAAAEMAAABzNAAAAGQBfABfAGQCZAOEAHwAagFEAIMBfABfAXgWfABqAUQAXQx9AXwBagKDAAEAcSBXAHwAUwApBHp+RXh0ZW5kcyBDe2xlYXZlV2hpdGVzcGFjZX0gZGVmaW5lZCBpbiBiYXNlIGNsYXNzLCBhbmQgYWxzbyBpbnZva2VzIEN7bGVhdmVXaGl0ZXNwYWNlfSBvbgogICAgICAgICAgIGFsbCBjb250YWluZWQgZXhwcmVzc2lvbnMuRmMBAAAAAAAAAAIAAAADAAAAUwAAAHMUAAAAZwB8AF0MfQF8AWoAgwCRAnEEUwBydwAAACkBcswAAAApAnKFAAAAcoABAABydwAAAHJ3AAAAcngAAABy0QAAALMMAABzAgAAAAYAejNQYXJzZUV4cHJlc3Npb24ubGVhdmVXaGl0ZXNwYWNlLjxsb2NhbHM+LjxsaXN0Y29tcD4pA3JYAQAAcjQCAAByxgEAACkCcp4AAABygAEAAHJ3AAAAcncAAAByeAAAAHLGAQAArwwAAHMKAAAAAAMGARIBDAEMAXofUGFyc2VFeHByZXNzaW9uLmxlYXZlV2hpdGVzcGFjZWMCAAAAAAAAAAMAAAAEAAAAAwAAAHN6AAAAdAB8AXQBgwJyRnwBfABqAmsHcnZ0A3QEfACDAmoFfAGDAQEAeFB8AGoGRABdFH0CfAJqBXwAagJkAhkAgwEBAHEsVwBuMHQDdAR8AIMCagV8AYMBAQB4HnwAagZEAF0UfQJ8AmoFfABqAmQDGQCDAQEAcV5XAHwAUwApBE5ycgAAAHJzAAAAcnMAAAApB3J6AAAAcisAAAByXQEAAHLWAQAAciAAAAByyQEAAHI0AgAAKQNyngAAAHL/AAAAcoABAAApAXJIAQAAcncAAAByeAAAAHLJAQAAuAwAAHMSAAAAAAEKAQoBEAEMARYCEAEMARQBehZQYXJzZUV4cHJlc3Npb24uaWdub3JlYwEAAAAAAAAAAQAAAAwAAAADAAAAc0wAAAB5DnQAdAF8AIMCagKDAFMABAB0A2sKciIBAAEAAQBZAG4CWAB8AGoEZABrCHJGZAF8AGoFagZ0B3wAagiDAWYCFgB8AF8EfABqBFMAKQJOegclczooJXMpKQly1gEAAHIgAAAAcqcAAABySwEAAHJVAQAAckgBAABykQAAAHKEAAAAcjQCAAApAXKeAAAAKQFySAEAAHJ3AAAAcngAAABypwAAAMQMAABzDgAAAAABAgEOAQ4BBgIKARgBehdQYXJzZUV4cHJlc3Npb24uX19zdHJfX2MBAAAAAAAAAAMAAAAEAAAAAwAAAHMwAQAAdAB0AXwAgwJqAoMAAQB4FnwAagNEAF0MfQF8AWoCgwABAHEWVwB0BHwAagODAWQBawKQAXIefABqA2QCGQB9AnQFfAJ8AGoGgwJyqHwCagcMAHKofAJqCGQAawhyqHwCagkMAHKofAJqA2QAZACFAhkAfABqA2QDGQBnARcAfABfA2QAfABfCnwABABqC3wCagtPAAIAXwt8AAQAagx8AmoMTwACAF8MfABqA2QFGQB9AnQFfAJ8AGoGgwJv1nwCagcMAG/WfAJqCGQAawhv1nwCagkMAJABch58AGoDZABkBoUCGQB8AmoDZABkAIUCGQAXAHwAXwNkAHwAXwp8AAQAagt8AmoLTwACAF8LfAAEAGoMfAJqDE8AAgBfDGQEdA18AIMBFwB8AF8OfABTACkHTnJxAAAAcgEAAABycgAAAHoJRXhwZWN0ZWQgcnMAAABycwAAACkPctYBAAByIAAAAHKkAQAAcjQCAABy2AAAAHJ6AAAAckgBAAByUwEAAHJWAQAAcl4BAAByVQEAAHJbAQAAcmABAAByhAAAAHJhAQAAKQNyngAAAHKAAQAAcv8AAAApAXJIAQAAcncAAAByeAAAAHKkAQAAzgwAAHMwAAAAAAEOAgwBDAUQAQoBDAEIAQoBCAEcAQYBEAEQAgoBDAEIAQoBCgEeAQYBEAEQAg4CehpQYXJzZUV4cHJlc3Npb24uc3RyZWFtbGluZWMDAAAAAAAAAAQAAAADAAAAAwAAAHMWAAAAdAB0AXwAgwJqAnwBfAKDAn0DfANTACkBTikDctYBAAByIAAAAHJtAQAAKQRyngAAAHK+AAAAcmwBAABygwAAACkBckgBAABydwAAAHJ4AAAAcm0BAADwDAAAcwQAAAAAARIBeh5QYXJzZUV4cHJlc3Npb24uc2V0UmVzdWx0c05hbWVjAgAAAAAAAAAEAAAAAwAAAEMAAABzOgAAAHwBZABkAIUCGQB8AGcBFwB9AngYfABqAEQAXQ59A3wDagF8AoMBAQBxGlcAfABqAmcAgwEBAGQAUwApAU4pA3I0AgAAcs8BAAByzQEAACkEcp4AAAByzgEAANoDdG1wcoABAABydwAAAHJ3AAAAcngAAAByzwEAAPQMAABzCAAAAAABEgEMAQ4BehhQYXJzZUV4cHJlc3Npb24udmFsaWRhdGVjAQAAAAAAAAACAAAAAwAAAAMAAABzJAAAAHQAdAF8AIMCagKDAH0BZAFkAoQAfABqA0QAgwF8AV8DfAFTACkDTmMBAAAAAAAAAAIAAAADAAAAUwAAAHMUAAAAZwB8AF0MfQF8AWoAgwCRAnEEUwBydwAAACkBcswAAAApAnKFAAAAcoABAABydwAAAHJ3AAAAcngAAABy0QAAAPwMAABzAgAAAAYAeihQYXJzZUV4cHJlc3Npb24uY29weS48bG9jYWxzPi48bGlzdGNvbXA+KQRy1gEAAHIgAAAAcswAAAByNAIAACkCcp4AAABygwAAACkBckgBAABydwAAAHJ4AAAAcswAAAD6DAAAcwYAAAAAAQ4BEgF6FFBhcnNlRXhwcmVzc2lvbi5jb3B5KQFGKQFGKQ9ykQAAAHKSAAAAcpMAAABysAAAAHKgAAAAcrcAAABy+wAAAHLGAQAAcskBAABypwAAAHKkAQAAcm0BAAByzwEAAHLMAAAAcugBAABydwAAAHJ3AAAAKQFySAEAAHJ4AAAAciAAAACPDAAAcxYAAAAIAwQBDhQIAwgFCAkMDAwKDCIOBAwGYwAAAAAAAAAAAAAAAAQAAAAAAAAAc1QAAABlAFoBZABaAmQBWgNHAGQCZAOEAGQDZQSDA1oFZA+HAGYBZAVkBoQJWgZkEGQHZAiEAVoHZAlkCoQAWghkC2QMhABaCWQNZA6EAFoKhwAEAFoLUwApEXIGAAAAYQ0CAAAKICAgIFJlcXVpcmVzIGFsbCBnaXZlbiBDe1BhcnNlRXhwcmVzc2lvbn1zIHRvIGJlIGZvdW5kIGluIHRoZSBnaXZlbiBvcmRlci4KICAgIEV4cHJlc3Npb25zIG1heSBiZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4KICAgIE1heSBiZSBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgQ3snKyd9IG9wZXJhdG9yLgogICAgTWF5IGFsc28gYmUgY29uc3RydWN0ZWQgdXNpbmcgdGhlIEN7Jy0nfSBvcGVyYXRvciwgd2hpY2ggd2lsbCBzdXBwcmVzcyBiYWNrdHJhY2tpbmcuCgogICAgRXhhbXBsZTo6CiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBuYW1lX2V4cHIgPSBPbmVPck1vcmUoV29yZChhbHBoYXMpKQoKICAgICAgICBleHByID0gQW5kKFtpbnRlZ2VyKCJpZCIpLG5hbWVfZXhwcigibmFtZSIpLGludGVnZXIoImFnZSIpXSkKICAgICAgICAjIG1vcmUgZWFzaWx5IHdyaXR0ZW4gYXM6CiAgICAgICAgZXhwciA9IGludGVnZXIoImlkIikgKyBuYW1lX2V4cHIoIm5hbWUiKSArIGludGVnZXIoImFnZSIpCiAgICBjAAAAAAAAAAAAAAAAAwAAAAAAAABzHAAAAGUAWgFkAFoChwBmAWQBZAKECFoDhwAEAFoEUwApA3oOQW5kLl9FcnJvclN0b3BjAQAAAAAAAAADAAAAAwAAAA8AAABzJgAAAHQAdAFqAnwAgwJqA3wBfAKOAQEAZAF8AF8EfABqBYMAAQBkAFMAKQJO+gEtKQZy1gEAAHIGAAAAcrQBAAByoAAAAHK+AAAAcsYBAAApA3KeAAAAcp0AAABy9QAAACkBckgBAABydwAAAHJ4AAAAcqAAAAAQDQAAcwYAAAAAARQBBgF6F0FuZC5fRXJyb3JTdG9wLl9faW5pdF9fKQVykQAAAHKSAAAAcpMAAAByoAAAAHLoAQAAcncAAABydwAAACkBckgBAAByeAAAAHK0AQAADw0AAHMCAAAACAFytAEAAFRjAwAAAAAAAAADAAAAAwAAAAMAAABzUgAAAHQAdAF8AIMCagJ8AXwCgwIBAHQDZAFkAoQAfABqBEQAgwGDAXwAXwV8AGoGfABqBGQDGQBqB4MBAQB8AGoEZAMZAGoIfABfCGQEfABfCWQAUwApBU5jAQAAAAAAAAACAAAAAgAAAHMAAABzFAAAAHwAXQx9AXwBagBWAAEAcQJkAFMAKQFOKQFyWwEAACkCcoUAAABygAEAAHJ3AAAAcncAAAByeAAAAHKHAAAAFw0AAHMCAAAABAB6H0FuZC5fX2luaXRfXy48bG9jYWxzPi48Z2VuZXhwcj5yAQAAAFQpCnLWAQAAcgYAAAByoAAAAHI2AgAAcjQCAAByWwEAAHLHAQAAclkBAAByWAEAAHJlAQAAKQNyngAAAHI0AgAAcmcBAAApAXJIAQAAcncAAAByeAAAAHKgAAAAFQ0AAHMKAAAAAAESARYBEgEOAXoMQW5kLl9faW5pdF9fYwQAAAAAAAAACQAAABEAAABDAAAAcwIBAAB8AGoAZAEZAGoBfAF8AnwDZAJkA40EXAJ9An0EZAJ9BXjYfABqAGQEZACFAhkARABdxn0GdAJ8BnQDagSDAnJGZAV9BXEwfAVy0HkWfAZqAXwBfAJ8A4MDXAJ9An0HVwBx4gQAdAVrCnJ2AQABAAEAggBZAHHiBAB0BmsKcqYBAH0IAQB6FmQAfAhfB3QFagh8CIMBggFXAFkAZABkAH0IfghYAHHiBAB0CWsKcswBAAEAAQB0BXwBdAp8AYMBfABqC3wAgwSCAVkAceJYAG4SfAZqAXwBfAJ8A4MDXAJ9An0HfAdz7nwHagyDAHIwfAR8BzcAfQRxMFcAfAJ8BGYCUwApBk5yAQAAAEYpAXJwAQAAcnIAAABUKQ1yNAIAAHJ0AQAAcnoAAAByBgAAAHK0AQAAciMAAAByHQAAANoNX190cmFjZWJhY2tfX3KjAAAAcs8AAABy2AAAAHJhAQAAcvMAAAApCXKeAAAAci0BAABymQAAAHJvAQAA2gpyZXN1bHRsaXN0WgllcnJvclN0b3BygAEAAFoKZXhwcnRva2Vuc3KiAAAAcncAAABydwAAAHJ4AAAAcoQBAAAcDQAAcygAAAAAAxwBBAEUAQwBBAECAQQBAgEWAQ4BBgEQAQYBGgEOARwCEgEMAQwBeg1BbmQucGFyc2VJbXBsYwIAAAAAAAAAAgAAAAMAAABDAAAAcx4AAAB0AHwBdAGDAnIUdAJqA3wBgwF9AXwAagR8AYMBUwApAU4pBXJ6AAAAcssAAAByJAAAAHJRAQAAcvsAAAApAnKeAAAAcv8AAABydwAAAHJ3AAAAcngAAAByBgEAADUNAABzBgAAAAABCgEKAXoMQW5kLl9faWFkZF9fYwIAAAAAAAAABAAAAAMAAABDAAAAczgAAAB8AWQAZACFAhkAfABnARcAfQJ4IHwAagBEAF0WfQN8A2oBfAKDAQEAfANqAnMaUABxGlcAZABTACkBTikDcjQCAAByzQEAAHJbAQAAKQRyngAAAHKzAAAA2g9zdWJSZWNDaGVja0xpc3RygAEAAHJ3AAAAcncAAAByeAAAAHLNAQAAOg0AAHMKAAAAAAESAQwBCgEGAXoSQW5kLmNoZWNrUmVjdXJzaW9uYwEAAAAAAAAAAQAAAAQAAABDAAAAc0AAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAawhyOmQCZANqA2QEZAWEAHwAagREAIMBgwEXAGQGFwB8AF8CfABqAlMAKQdOcr4AAAD6AXty3wEAAGMBAAAAAAAAAAIAAAADAAAAcwAAAHMWAAAAfABdDn0BdAB8AYMBVgABAHECZABTACkBTikBcoQAAAApAnKFAAAAcoABAABydwAAAHJ3AAAAcngAAAByhwAAAEYNAABzAgAAAAQAeh5BbmQuX19zdHJfXy48bG9jYWxzPi48Z2VuZXhwcj76AX0pBXLqAAAAcr4AAAByVQEAAHKqAAAAcjQCAAApAXKeAAAAcncAAABydwAAAHJ4AAAAcqcAAABBDQAAcwoAAAAAAQoBBgIKASACegtBbmQuX19zdHJfXykBVCkBVCkMcpEAAABykgAAAHKTAAAAcrAAAAByDQAAAHK0AQAAcqAAAAByhAEAAHIGAQAAcs0BAABypwAAAHLoAQAAcncAAABydwAAACkBckgBAAByeAAAAHIGAAAA/wwAAHMOAAAACA4EAhAGDgcKGQgFCAdjAAAAAAAAAAAAAAAABAAAAAAAAABzRAAAAGUAWgFkAFoCZAFaA2QOhwBmAWQDZASECVoEZA9kBmQHhAFaBWQIZAmEAFoGZApkC4QAWgdkDGQNhABaCIcABABaCVMAKRByHAAAAGG+AQAACiAgICBSZXF1aXJlcyB0aGF0IGF0IGxlYXN0IG9uZSBDe1BhcnNlRXhwcmVzc2lvbn0gaXMgZm91bmQuCiAgICBJZiB0d28gZXhwcmVzc2lvbnMgbWF0Y2gsIHRoZSBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyB0aGUgbG9uZ2VzdCBzdHJpbmcgd2lsbCBiZSB1c2VkLgogICAgTWF5IGJlIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBDeydeJ30gb3BlcmF0b3IuCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBjb25zdHJ1Y3QgT3IgdXNpbmcgJ14nIG9wZXJhdG9yCiAgICAgICAgCiAgICAgICAgbnVtYmVyID0gV29yZChudW1zKSBeIENvbWJpbmUoV29yZChudW1zKSArICcuJyArIFdvcmQobnVtcykpCiAgICAgICAgcHJpbnQobnVtYmVyLnNlYXJjaFN0cmluZygiMTIzIDMuMTQxNiA3ODkiKSkKICAgIHByaW50czo6CiAgICAgICAgW1snMTIzJ10sIFsnMy4xNDE2J10sIFsnNzg5J11dCiAgICBGYwMAAAAAAAAAAwAAAAMAAAADAAAAczoAAAB0AHQBfACDAmoCfAF8AoMCAQB8AGoDcjB0BGQBZAKEAHwAagNEAIMBgwF8AF8FbgZkA3wAXwVkAFMAKQROYwEAAAAAAAAAAgAAAAIAAABzAAAAcxQAAAB8AF0MfQF8AWoAVgABAHECZABTACkBTikBclsBAAApAnKFAAAAcoABAABydwAAAHJ3AAAAcngAAAByhwAAAFwNAABzAgAAAAQAeh5Pci5fX2luaXRfXy48bG9jYWxzPi48Z2VuZXhwcj5UKQZy1gEAAHIcAAAAcqAAAAByNAIAAHIeAQAAclsBAAApA3KeAAAAcjQCAAByZwEAACkBckgBAABydwAAAHJ4AAAAcqAAAABZDQAAcwgAAAAAARIBBgEYAnoLT3IuX19pbml0X19UYwQAAAAAAAAACwAAABEAAABDAAAAc1QBAABkBn0EZAB9BWcAfQZ4pHwAagBEAF2afQd5EHwHagF8AXwCgwJ9CFcAbnYEAHQCawpyZAEAfQkBAHogZAB8CV8DfAlqBHwEawRyVHwJfQV8CWoEfQRXAFkAZABkAH0JfglYAHEUBAB0BWsKcp4BAAEAAQB0BnwBgwF8BGsEcpp0AnwBdAZ8AYMBfAdqB3wAgwR9BXQGfAGDAX0EWQBxFFgAfAZqCHwIfAdmAoMBAQBxFFcAfAaQAXIqfAZqCWQCZAOEAGQEjQEBAHhgfAZEAF1YXAJ9Cn0HeQ58B2oKfAF8AnwDgwNTAAQAdAJrCpABciQBAH0JAQB6ImQAfAlfA3wJagR8BGsEkAFyFHwJfQV8CWoEfQRXAFkAZABkAH0JfglYAHHOWABxzlcAfAVkAGsJkAFyQnwAagd8BV8LfAWCAW4OdAJ8AXwCZAV8AIMEggFkAFMAKQdOcnIAAABjAQAAAAAAAAABAAAAAgAAAFMAAABzCgAAAHwAZAEZAAsAUwApAk5yAQAAAHJ3AAAAKQHaAXhydwAAAHJ3AAAAcngAAAByeQAAAHUNAABzAAAAAHoeT3IucGFyc2VJbXBsLjxsb2NhbHM+LjxsYW1iZGE+KQFy+AAAAHogbm8gZGVmaW5lZCBhbHRlcm5hdGl2ZXMgdG8gbWF0Y2hycwAAACkMcjQCAAByiwEAAHIfAAAAcjkCAABymQAAAHLPAAAActgAAAByYQEAAHL7AAAA2gRzb3J0cnQBAABymgAAACkLcp4AAAByLQEAAHKZAAAAcm8BAADaCW1heEV4Y0xvY9oMbWF4RXhjZXB0aW9ucqoBAABygAEAAFoEbG9jMnKJAQAA2gFfcncAAABydwAAAHJ4AAAAcoQBAABgDQAAczwAAAAAAQQBBAEEAQwBAgEQARABBgEKAQQBFgEOAQwBFAEOAxICBgEQAQ4BAgEOARIBBgEMAQQBHAIKAQgBBgJ6DE9yLnBhcnNlSW1wbGMCAAAAAAAAAAIAAAADAAAAQwAAAHMeAAAAdAB8AXQBgwJyFHQCagN8AYMBfQF8AGoEfAGDAVMAKQFOKQVyegAAAHLLAAAAciQAAAByUQEAAHL7AAAAKQJyngAAAHL/AAAAcncAAABydwAAAHJ4AAAA2ghfX2l4b3JfX4YNAABzBgAAAAABCgEKAXoLT3IuX19peG9yX19jAQAAAAAAAAABAAAABAAAAEMAAABzQAAAAHQAfABkAYMCchB8AGoBUwB8AGoCZABrCHI6ZAJkA2oDZARkBYQAfABqBEQAgwGDARcAZAYXAHwAXwJ8AGoCUwApB05yvgAAAHI8AgAAegMgXiBjAQAAAAAAAAACAAAAAwAAAHMAAABzFgAAAHwAXQ59AXQAfAGDAVYAAQBxAmQAUwApAU4pAXKEAAAAKQJyhQAAAHKAAQAAcncAAABydwAAAHJ4AAAAcocAAACQDQAAcwIAAAAEAHodT3IuX19zdHJfXy48bG9jYWxzPi48Z2VuZXhwcj5yPQIAACkFcuoAAAByvgAAAHJVAQAAcqoAAAByNAIAACkBcp4AAABydwAAAHJ3AAAAcngAAABypwAAAIsNAABzCgAAAAABCgEGAgoBIAJ6Ck9yLl9fc3RyX19jAgAAAAAAAAAEAAAAAwAAAEMAAABzMAAAAHwBZABkAIUCGQB8AGcBFwB9AngYfABqAEQAXQ59A3wDagF8AoMBAQBxGlcAZABTACkBTikCcjQCAAByzQEAACkEcp4AAAByswAAAHI7AgAAcoABAABydwAAAHJ3AAAAcngAAAByzQEAAJQNAABzBgAAAAABEgEMAXoRT3IuY2hlY2tSZWN1cnNpb24pAUYpAVQpCnKRAAAAcpIAAABykwAAAHKwAAAAcqAAAAByhAEAAHJDAgAAcqcAAAByzQEAAHLoAQAAcncAAABydwAAACkBckgBAAByeAAAAHIcAAAASw0AAHMMAAAACA0EAQ4HCiYIBQgJYwAAAAAAAAAAAAAAAAQAAAAAAAAAc0QAAABlAFoBZABaAmQBWgNkDocAZgFkA2QEhAlaBGQPZAZkB4QBWgVkCGQJhABaBmQKZAuEAFoHZAxkDYQAWgiHAAQAWglTACkQchYAAABhvQIAAAogICAgUmVxdWlyZXMgdGhhdCBhdCBsZWFzdCBvbmUgQ3tQYXJzZUV4cHJlc3Npb259IGlzIGZvdW5kLgogICAgSWYgdHdvIGV4cHJlc3Npb25zIG1hdGNoLCB0aGUgZmlyc3Qgb25lIGxpc3RlZCBpcyB0aGUgb25lIHRoYXQgd2lsbCBtYXRjaC4KICAgIE1heSBiZSBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgQ3snfCd9IG9wZXJhdG9yLgoKICAgIEV4YW1wbGU6OgogICAgICAgICMgY29uc3RydWN0IE1hdGNoRmlyc3QgdXNpbmcgJ3wnIG9wZXJhdG9yCiAgICAgICAgCiAgICAgICAgIyB3YXRjaCB0aGUgb3JkZXIgb2YgZXhwcmVzc2lvbnMgdG8gbWF0Y2gKICAgICAgICBudW1iZXIgPSBXb3JkKG51bXMpIHwgQ29tYmluZShXb3JkKG51bXMpICsgJy4nICsgV29yZChudW1zKSkKICAgICAgICBwcmludChudW1iZXIuc2VhcmNoU3RyaW5nKCIxMjMgMy4xNDE2IDc4OSIpKSAjICBGYWlsISAtPiBbWycxMjMnXSwgWyczJ10sIFsnMTQxNiddLCBbJzc4OSddXQoKICAgICAgICAjIHB1dCBtb3JlIHNlbGVjdGl2ZSBleHByZXNzaW9uIGZpcnN0CiAgICAgICAgbnVtYmVyID0gQ29tYmluZShXb3JkKG51bXMpICsgJy4nICsgV29yZChudW1zKSkgfCBXb3JkKG51bXMpCiAgICAgICAgcHJpbnQobnVtYmVyLnNlYXJjaFN0cmluZygiMTIzIDMuMTQxNiA3ODkiKSkgIyAgQmV0dGVyIC0+IFtbJzEyMyddLCBbJzMuMTQxNiddLCBbJzc4OSddXQogICAgRmMDAAAAAAAAAAMAAAADAAAAAwAAAHM6AAAAdAB0AXwAgwJqAnwBfAKDAgEAfABqA3IwdARkAWQChAB8AGoDRACDAYMBfABfBW4GZAN8AF8FZABTACkETmMBAAAAAAAAAAIAAAACAAAAcwAAAHMUAAAAfABdDH0BfAFqAFYAAQBxAmQAUwApAU4pAXJbAQAAKQJyhQAAAHKAAQAAcncAAABydwAAAHJ4AAAAcocAAACuDQAAcwIAAAAEAHomTWF0Y2hGaXJzdC5fX2luaXRfXy48bG9jYWxzPi48Z2VuZXhwcj5UKQZy1gEAAHIWAAAAcqAAAAByNAIAAHIeAQAAclsBAAApA3KeAAAAcjQCAAByZwEAACkBckgBAABydwAAAHJ4AAAAcqAAAACrDQAAcwgAAAAAARIBBgEYAnoTTWF0Y2hGaXJzdC5fX2luaXRfX1RjBAAAAAAAAAAJAAAAEQAAAEMAAABzxAAAAGQDfQRkAH0FeLZ8AGoARABdiH0GeRJ8BmoBfAF8AnwDgwN9B3wHUwAEAHQCawpyXAEAfQgBAHoafAhqA3wEawRyTHwIfQV8CGoDfQRXAFkAZABkAH0IfghYAHEQBAB0BGsKcpYBAAEAAQB0BXwBgwF8BGsEcpJ0AnwBdAV8AYMBfAZqBnwAgwR9BXQFfAGDAX0EWQBxEFgAcRBXAHwFZABrCXKyfABqBnwFXwd8BYIBbg50AnwBfAJkAnwAgwSCAWQAUwApBE5ycgAAAHogbm8gZGVmaW5lZCBhbHRlcm5hdGl2ZXMgdG8gbWF0Y2hycwAAACkIcjQCAABydAEAAHIfAAAAcpkAAAByzwAAAHLYAAAAcmEBAABymgAAACkJcp4AAAByLQEAAHKZAAAAcm8BAAByQAIAAHJBAgAAcoABAABygwAAAHKJAQAAcncAAABydwAAAHJ4AAAAcoQBAACyDQAAcyQAAAAAAQQBBAEMAQIBDgEEARABCgEEARYBDgEMARQBEgQIAQgBBgJ6FE1hdGNoRmlyc3QucGFyc2VJbXBsYwIAAAAAAAAAAgAAAAMAAABDAAAAcx4AAAB0AHwBdAGDAnIUdAJqA3wBgwF9AXwAagR8AYMBUwApAU4pBXJ6AAAAcssAAAByJAAAAHJRAQAAcvsAAAApAnKeAAAAcv8AAABydwAAAHJ3AAAAcngAAADaB19faW9yX1/KDQAAcwYAAAAAAQoBCgF6Ek1hdGNoRmlyc3QuX19pb3JfX2MBAAAAAAAAAAEAAAAEAAAAQwAAAHNAAAAAdAB8AGQBgwJyEHwAagFTAHwAagJkAGsIcjpkAmQDagNkBGQFhAB8AGoERACDAYMBFwBkBhcAfABfAnwAagJTACkHTnK+AAAAcjwCAAB6AyB8IGMBAAAAAAAAAAIAAAADAAAAcwAAAHMWAAAAfABdDn0BdAB8AYMBVgABAHECZABTACkBTikBcoQAAAApAnKFAAAAcoABAABydwAAAHJ3AAAAcngAAAByhwAAANQNAABzAgAAAAQAeiVNYXRjaEZpcnN0Ll9fc3RyX18uPGxvY2Fscz4uPGdlbmV4cHI+cj0CAAApBXLqAAAAcr4AAAByVQEAAHKqAAAAcjQCAAApAXKeAAAAcncAAABydwAAAHJ4AAAAcqcAAADPDQAAcwoAAAAAAQoBBgIKASACehJNYXRjaEZpcnN0Ll9fc3RyX19jAgAAAAAAAAAEAAAAAwAAAEMAAABzMAAAAHwBZABkAIUCGQB8AGcBFwB9AngYfABqAEQAXQ59A3wDagF8AoMBAQBxGlcAZABTACkBTikCcjQCAAByzQEAACkEcp4AAAByswAAAHI7AgAAcoABAABydwAAAHJ3AAAAcngAAAByzQEAANgNAABzBgAAAAABEgEMAXoZTWF0Y2hGaXJzdC5jaGVja1JlY3Vyc2lvbikBRikBVCkKcpEAAABykgAAAHKTAAAAcrAAAAByoAAAAHKEAQAAckQCAABypwAAAHLNAQAAcugBAABydwAAAHJ3AAAAKQFySAEAAHJ4AAAAchYAAACaDQAAcwwAAAAIEAQBDgcKGAgFCAljAAAAAAAAAAAAAAAABAAAAAAAAABzPAAAAGUAWgFkAFoCZAFaA2QLhwBmAWQDZASECVoEZAxkBWQGhAFaBWQHZAiEAFoGZAlkCoQAWgeHAAQAWghTACkNcgwAAABhbQcAAAogICAgUmVxdWlyZXMgYWxsIGdpdmVuIEN7UGFyc2VFeHByZXNzaW9ufXMgdG8gYmUgZm91bmQsIGJ1dCBpbiBhbnkgb3JkZXIuCiAgICBFeHByZXNzaW9ucyBtYXkgYmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuCiAgICBNYXkgYmUgY29uc3RydWN0ZWQgdXNpbmcgdGhlIEN7JyYnfSBvcGVyYXRvci4KCiAgICBFeGFtcGxlOjoKICAgICAgICBjb2xvciA9IG9uZU9mKCJSRUQgT1JBTkdFIFlFTExPVyBHUkVFTiBCTFVFIFBVUlBMRSBCTEFDSyBXSElURSBCUk9XTiIpCiAgICAgICAgc2hhcGVfdHlwZSA9IG9uZU9mKCJTUVVBUkUgQ0lSQ0xFIFRSSUFOR0xFIFNUQVIgSEVYQUdPTiBPQ1RBR09OIikKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIHNoYXBlX2F0dHIgPSAic2hhcGU6IiArIHNoYXBlX3R5cGUoInNoYXBlIikKICAgICAgICBwb3NuX2F0dHIgPSAicG9zbjoiICsgR3JvdXAoaW50ZWdlcigieCIpICsgJywnICsgaW50ZWdlcigieSIpKSgicG9zbiIpCiAgICAgICAgY29sb3JfYXR0ciA9ICJjb2xvcjoiICsgY29sb3IoImNvbG9yIikKICAgICAgICBzaXplX2F0dHIgPSAic2l6ZToiICsgaW50ZWdlcigic2l6ZSIpCgogICAgICAgICMgdXNlIEVhY2ggKHVzaW5nIG9wZXJhdG9yICcmJykgdG8gYWNjZXB0IGF0dHJpYnV0ZXMgaW4gYW55IG9yZGVyIAogICAgICAgICMgKHNoYXBlIGFuZCBwb3NuIGFyZSByZXF1aXJlZCwgY29sb3IgYW5kIHNpemUgYXJlIG9wdGlvbmFsKQogICAgICAgIHNoYXBlX3NwZWMgPSBzaGFwZV9hdHRyICYgcG9zbl9hdHRyICYgT3B0aW9uYWwoY29sb3JfYXR0cikgJiBPcHRpb25hbChzaXplX2F0dHIpCgogICAgICAgIHNoYXBlX3NwZWMucnVuVGVzdHMoJycnCiAgICAgICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgICAgIHNoYXBlOiBDSVJDTEUgc2l6ZTogNTAgY29sb3I6IEJMVUUgcG9zbjogNTAsODAKICAgICAgICAgICAgY29sb3I6R1JFRU4gc2l6ZToyMCBzaGFwZTpUUklBTkdMRSBwb3NuOjIwLDQwCiAgICAgICAgICAgICcnJwogICAgICAgICAgICApCiAgICBwcmludHM6OgogICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgWydzaGFwZTonLCAnU1FVQVJFJywgJ2NvbG9yOicsICdCTEFDSycsICdwb3NuOicsIFsnMTAwJywgJywnLCAnMTIwJ11dCiAgICAgICAgLSBjb2xvcjogQkxBQ0sKICAgICAgICAtIHBvc246IFsnMTAwJywgJywnLCAnMTIwJ10KICAgICAgICAgIC0geDogMTAwCiAgICAgICAgICAtIHk6IDEyMAogICAgICAgIC0gc2hhcGU6IFNRVUFSRQoKCiAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgIFsnc2hhcGU6JywgJ0NJUkNMRScsICdzaXplOicsICc1MCcsICdjb2xvcjonLCAnQkxVRScsICdwb3NuOicsIFsnNTAnLCAnLCcsICc4MCddXQogICAgICAgIC0gY29sb3I6IEJMVUUKICAgICAgICAtIHBvc246IFsnNTAnLCAnLCcsICc4MCddCiAgICAgICAgICAtIHg6IDUwCiAgICAgICAgICAtIHk6IDgwCiAgICAgICAgLSBzaGFwZTogQ0lSQ0xFCiAgICAgICAgLSBzaXplOiA1MAoKCiAgICAgICAgY29s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c3RvcE9uIC0gKGRlZmF1bHQ9Q3tOb25lfSkgLSBleHByZXNzaW9uIGZvciBhIHRlcm1pbmF0aW5nIHNlbnRpbmVsCiAgICAgICAgICAob25seSByZXF1aXJlZCBpZiB0aGUgc2VudGluZWwgd291bGQgb3JkaW5hcmlseSBtYXRjaCB0aGUgcmVwZXRpdGlvbiAKICAgICAgICAgIGV4cHJlc3Npb24pICAgICAgICAgIAoKICAgIEV4YW1wbGU6OgogICAgICAgIGRhdGFfd29yZCA9IFdvcmQoYWxwaGFzKQogICAgICAgIGxhYmVsID0gZGF0YV93b3JkICsgRm9sbG93ZWRCeSgnOicpCiAgICAgICAgYXR0cl9leHByID0gR3JvdXAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogQkxBQ0siCiAgICAgICAgT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkucHByaW50KCkgICMgRmFpbCEgcmVhZCAnY29sb3InIGFzIGRhdGEgaW5zdGVhZCBvZiBuZXh0IGxhYmVsIC0+IFtbJ3NoYXBlJywgJ1NRVUFSRSBjb2xvciddXQoKICAgICAgICAjIHVzZSBzdG9wT24gYXR0cmlidXRlIGZvciBPbmVPck1vcmUgdG8gYXZvaWQgcmVhZGluZyBsYWJlbCBzdHJpbmcgYXMgcGFydCBvZiB0aGUgZGF0YQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLnBwcmludCgpICMgQmV0dGVyIC0+IFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIgbGVmdCddLCBbJ2NvbG9yJywg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TQIAAEkPAABzBgAAAAgBCAIEAXJNAgAAYwAAAAAAAAAAAAAAAAQAAAAAAAAAczYAAABlAFoBZABaAmQBWgNlBGYBhwBmAWQCZAOECVoFZAlkBWQGhAFaBmQHZAiEAFoHhwAEAFoIUwApCnIbAAAAYWEDAAAKICAgIE9wdGlvbmFsIG1hdGNoaW5nIG9mIHRoZSBnaXZlbiBleHByZXNzaW9uLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggemVybyBvciBtb3JlIHRpbWVzCiAgICAgLSBkZWZhdWx0IChvcHRpb25hbCkgLSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgb3B0aW9uYWwgZXhwcmVzc2lvbiBpcyBub3QgZm91bmQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBVUyBwb3N0YWwgY29kZSBjYW4gYmUgYSA1LWRpZ2l0IHppcCwgcGx1cyBvcHRpb25hbCA0LWRpZ2l0IHF1YWxpZmllcgogICAgICAgIHppcCA9IENvbWJpbmUoV29yZChudW1zLCBleGFjdD01KSArIE9wdGlvbmFsKCctJyArIFdvcmQobnVtcywgZXhhY3Q9NCkpKQogICAgICAgIHppcC5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgICAgICAxMjM0NQogICAgICAgICAgICAKICAgICAgICAgICAgIyBaSVArNCBmb3JtCiAgICAgICAgICAgIDEyMTAxLTAwMDEKICAgICAgICAgICAgCiAgICAgICAgICAgICMgaW52YWxpZCBaSVAKICAgICAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICcnJykKICAgIHByaW50czo6CiAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgIDEyMzQ1CiAgICAgICAgWycxMjM0NSddCgogICAgICAgICMgWklQKzQgZm9ybQogICAgICAgIDEyMTAxLTAwMDEKICAgICAgICBbJzEyMTAxLTAwMDEnXQoKICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICBeCiAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNSksIChsaW5lOjEsIGNvbDo2KQogICAgYwMAAAAAAAAAAwAAAAQAAAADAAAAcy4AAAB0AHQBfACDAmoCfAFkAWQCjQIBAHwAagNqBHwAXwR8AnwAXwVkA3wAXwZkAFMAKQRORikBcmcBAABUKQdy1gEAAHIbAAAAcqAAAAByLgEAAHJXAQAAcvkAAAByWwEAACkDcp4AAAByLgEAAHL0AAAAKQFySAEAAHJ3AAAAcngAAAByoAAAAHQPAABzCAAAAAABFAEKAQYBehFPcHRpb25hbC5fX2luaXRfX1RjBAAAAAAAAAAFAAAADAAAAEMAAABzegAAAHkcfABqAGoBfAF8AnwDZAFkAo0EXAJ9An0EVwBuVAQAdAJ0A2YCawpycAEAAQABAHwAagR0BWsJcmh8AGoAagZyXnQHfABqBGcBgwF9BHwAagR8BHwAagBqBjwAcWx8AGoEZwF9BG4EZwB9BFkAbgJYAHwCfARmAlMAKQNORikBcnABAAApCHIuAQAAcnQBAAByHwAAAHLPAAAAcvkAAADaE19vcHRpb25hbE5vdE1hdGNoZWRyVgEAAHIiAAAAKQVyngAAAHItAQAAcpkAAABybwEAAHKIAQAAcncAAABydwAAAHJ4AAAAcoQBAAB6DwAAcxQAAAAAAQIBHAESAQoBCAEMARACCgIKAXoST3B0aW9uYWwucGFyc2VJbXBsYwEAAAAAAAAAAQAAAAMAAABDAAAAczQAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAawhyLmQCdAN8AGoEgwEXAGQDFwB8AF8CfABqAlMAKQROcr4AAAByCAEAAHIJAQAAKQVy6gAAAHK+AAAAclUBAAByhAAAAHIuAQAAKQFyngAAAHJ3AAAAcncAAAByeAAAAHKnAAAAiA8AAHMKAAAAAAEKAQYCCgEUAnoQT3B0aW9uYWwuX19zdHJfXykBVCkJcpEAAABykgAAAHKTAAAAcrAAAAByTgIAAHKgAAAAcoQBAABypwAAAHLoAQAAcncAAABydwAAACkBckgBAAByeAAAAHIbAAAAUQ8AAHMIAAAACCIEARAGCg5jAAAAAAAAAAAAAAAABAAAAAAAAABzLAAAAGUAWgFkAFoCZAFaA2QJhwBmAWQEZAWECVoEZApkB2QIhAFaBYcABABaBlMAKQtyKAAAAGH/CQAACiAgICBUb2tlbiBmb3Igc2tpcHBpbmcgb3ZlciBhbGwgdW5kZWZpbmVkIHRleHQgdW50aWwgdGhlIG1hdGNoZWQgZXhwcmVzc2lvbiBpcyBmb3VuZC4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gZXhwciAtIHRhcmdldCBleHByZXNzaW9uIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgZGF0YSB0byBiZSBza2lwcGVkCiAgICAgLSBpbmNsdWRlIC0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGlmIFRydWUsIHRoZSB0YXJnZXQgZXhwcmVzc2lvbiBpcyBhbHNvIHBhcnNlZCAKICAgICAgICAgICh0aGUgc2tpcHBlZCB0ZXh0IGFuZCB0YXJnZXQgZXhwcmVzc2lvbiBhcmUgcmV0dXJuZWQgYXMgYSAyLWVsZW1lbnQgbGlzdCkuCiAgICAgLSBpZ25vcmUgLSAoZGVmYXVsdD1De05vbmV9KSB1c2VkIHRvIGRlZmluZSBncmFtbWFycyAodHlwaWNhbGx5IHF1b3RlZCBzdHJpbmdzIGFuZCAKICAgICAgICAgIGNvbW1lbnRzKSB0aGF0IG1pZ2h0IGNvbnRhaW4gZmFsc2UgbWF0Y2hlcyB0byB0aGUgdGFyZ2V0IGV4cHJlc3Npb24KICAgICAtIGZhaWxPbiAtIChkZWZhdWx0PUN7Tm9uZX0pIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IGFyZSBub3QgYWxsb3dlZCB0byBiZSAKICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBza2lwcGVkIHRlc3Q7IGlmIGZvdW5kIGJlZm9yZSB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gaXMgZm91bmQsIAogICAgICAgICAgdGhlIFNraXBUbyBpcyBub3QgYSBtYXRjaAoKICAgIEV4YW1wbGU6OgogICAgICAgIHJlcG9ydCA9ICcnJwogICAgICAgICAgICBPdXRzdGFuZGluZyBJc3N1ZXMgUmVwb3J0IC0gMSBKYW4gMjAwMAoKICAgICAgICAgICAgICAgIyB8IFNldmVyaXR5IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRGF5cyBPcGVuCiAgICAgICAgICAgIC0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLQogICAgICAgICAgICAgMTAxIHwgQ3JpdGljYWwgfCBJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoICAgICAgICAgICAgICAgICB8ICAgICAgICAgIDYKICAgICAgICAgICAgICA5NCB8IENvc21ldGljIHwgU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpICAgICAgICAgfCAgICAgICAgIDE0CiAgICAgICAgICAgICAgNzkgfCBNaW5vciAgICB8IFN5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzIHwgICAgICAgICA0NwogICAgICAgICAgICAnJycKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIFNFUCA9IFN1cHByZXNzKCd8JykKICAgICAgICAjIHVzZSBTa2lwVG8gdG8gc2ltcGx5IG1hdGNoIGV2ZXJ5dGhpbmcgdXAgdW50aWwgdGhlIG5leHQgU0VQCiAgICAgICAgIyAtIGlnbm9yZSBxdW90ZWQgc3RyaW5ncywgc28gdGhhdCBhICd8JyBjaGFyYWN0ZXIgaW5zaWRlIGEgcXVvdGVkIHN0cmluZyBkb2VzIG5vdCBtYXRjaAogICAgICAgICMgLSBwYXJzZSBhY3Rpb24gd2lsbCBjYWxsIHRva2VuLnN0cmlwKCkgZm9yIGVhY2ggbWF0Y2hlZCB0b2tlbiwgaS5lLiwgdGhlIGRlc2NyaXB0aW9uIGJvZHkKICAgICAgICBzdHJpbmdfZGF0YSA9IFNraXBUbyhTRVAsIGlnbm9yZT1xdW90ZWRTdHJpbmcpCiAgICAgICAgc3RyaW5nX2RhdGEuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnN0cmlwKSkKICAgICAgICB0aWNrZXRfZXhwciA9IChpbnRlZ2VyKCJpc3N1ZV9udW0iKSArIFNFUCAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoInNldiIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgiZGVzYyIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyKCJkYXlzX29wZW4iKSkKICAgICAgICAKICAgICAgICBmb3IgdGt0IGluIHRpY2tldF9leHByLnNlYXJjaFN0cmluZyhyZXBvcnQpOgogICAgICAgICAgICBwcmludCB0a3QuZHVtcCgpCiAgICBwcmludHM6OgogICAgICAgIFsnMTAxJywgJ0NyaXRpY2FsJywgJ0ludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2gnLCAnNiddCiAgICAgICAgLSBkYXlzX29wZW46IDYKICAgICAgICAtIGRlc2M6IEludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2gKICAgICAgICAtIGlzc3VlX251bTogMTAxCiAgICAgICAgLSBzZXY6IENyaXRpY2FsCiAgICAgICAgWyc5NCcsICdDb3NtZXRpYycsICJTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykiLCAnMTQnXQogICAgICAgIC0gZGF5c19vcGVuOiAxNAogICAgICAgIC0gZGVzYzogU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpCiAgICAgICAgLSBpc3N1ZV9udW06IDk0CiAgICAgICAgLSBzZXY6IENvc21ldGljCiAgICAgICAgWyc3OScsICdNaW5vcicsICdTeXN0ZW0gc2xvdyB3aGVuIHJ1bm5pbmcgdG9vIG1hbnkgcmVwb3J0cycsICc0NyddCiAgICAgICAgLSBkYXlzX29wZW46IDQ3CiAgICAgICAgLSBkZXNjOiBTeXN0ZW0gc2xvdyB3aGVuIHJ1bm5pbmcgdG9vIG1hbnkgcmVwb3J0cwogICAgICAgIC0gaXNzdWVfbnVtOiA3OQogICAgICAgIC0gc2V2OiBNaW5vcgogICAgRk5jBQAAAAAAAAAFAAAAAwAAAAMAAABzYAAAAHQAdAF8AIMCagJ8AYMBAQB8A3wAXwNkAXwAXwRkAnwAXwV8AnwAXwZkAnwAXwd0CHwEdAmDAnJGdApq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Y29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICAKICAgICAgICAjIHByaW50IGF0dHJpYnV0ZXMgYXMgcGxhaW4gZ3JvdXBzCiAgICAgICAgcHJpbnQoT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkuZHVtcCgpKQogICAgICAgIAogICAgICAgICMgaW5zdGVhZCBvZiBPbmVPck1vcmUoZXhwciksIHBhcnNlIHVzaW5nIERpY3QoT25lT3JNb3JlKEdyb3VwKGV4cHIpKSkgLSBEaWN0IHdpbGwgYXV0by1hc3NpZ24gbmFtZXMKICAgICAgICByZXN1bHQgPSBEaWN0KE9uZU9yTW9yZShHcm91cChhdHRyX2V4cHIpKSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIAogICAgICAgICMgYWNjZXNzIG5hbWVkIGZpZWxkcyBhcyBkaWN0IGVudHJpZXMsIG9yIG91dHB1dCBhcyBkaWN0CiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKSAgICAgICAgCiAgICAgICAgcHJpbnQocmVzdWx0LmFzRGljdCgpKQogICAgcHJpbnRzOjoKICAgICAgICBbJ3NoYXBlJywgJ1NRVUFSRScsICdwb3NuJywgJ3VwcGVyIGxlZnQnLCAnY29sb3InLCAnbGlnaHQgYmx1ZScsICd0ZXh0dXJlJywgJ2J1cmxhcCddCgogICAgICAgIFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIgbGVmdCddLCBbJ2NvbG9yJywgJ2xpZ2h0IGJsdWUnXSwgWyd0ZXh0dXJlJywgJ2J1cmxhcCddXQogICAgICAgIC0gY29sb3I6IGxpZ2h0IGJsdWUKICAgICAgICAtIHBvc246IHVwcGVyIGxlZnQKICAgICAgICAtIHNoYXBlOiBTUVVB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ZWQsIHRoaXMgZGVjb3JhdG9yIHdpbGwgcHJpbnQgQ3siPj4gZW50ZXJpbmcgSXttZXRob2QtbmFtZX0obGluZTpJe2N1cnJlbnRfc291cmNlX2xpbmV9LCBJe3BhcnNlX2xvY2F0aW9ufSwgSXttYXRjaGVkX3Rva2Vuc30pIi59CiAgICBXaGVuIHRoZSBwYXJzZSBhY3Rpb24gY29tcGxldGVzLCB0aGUgZGVjb3JhdG9yIHdpbGwgcHJpbnQgQ3siPDwifSBmb2xsb3dlZCBieSB0aGUgcmV0dXJuZWQgdmFsdWUsIG9yIGFueSBleGNlcHRpb24gdGhhdCB0aGUgcGFyc2UgYWN0aW9uIHJhaXNlZC4KCiAgICBFeGFtcGxlOjoKICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKQoKICAgICAgICBAdHJhY2VQYXJzZUFjdGlvbgogICAgICAgIGRlZiByZW1vdmVfZHVwbGljYXRlX2NoYXJzKHRva2Vucyk6CiAgICAgICAgICAgIHJldHVybiAnJy5qb2luKHNvcnRlZChzZXQoJycuam9pbih0b2tlbnMpKSkKCiAgICAgICAgd2RzID0gT25lT3JNb3JlKHdkKS5zZXRQYXJzZUFjdGlvbihyZW1vdmVfZHVwbGljYXRlX2NoYXJzKQogICAgICAgIHByaW50KHdkcy5wYXJzZVN0cmluZygic2xrZGpzIHNsZCBzbGRkIHNkbGYgc2RsamYiKSkKICAgIHByaW50czo6CiAgICAgICAgPj5lbnRlcmluZyByZW1vdmVfZHVwbGljYXRlX2NoYXJzKGxpbmU6ICdzbGtkanMgc2xkIHNsZGQgc2RsZiBzZGxqZicsIDAsIChbJ3Nsa2RqcycsICdzbGQnLCAnc2xkZCcsICdzZGxmJywgJ3NkbGpmJ10sIHt9KSkKICAgICAgICA8PGxlYXZpbmcgcmVtb3ZlX2R1cGxpY2F0ZV9jaGFycyAocmV0OiAnZGZqa2xzJykKICAgICAgICBbJ2RmamtscyddCiAgICBjAAAAAAAAAAAHAAAAEgAAABcAAABztAAAAIgAagB9AXwAZAdkAIUCGQBcA30CfQN9BHQBfACDAWQBawRyOHwAZAIZAGoCagBkAxcAfAEXAH0BdANqBGoFZAR8AXQGfAN8AoMC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ID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKICAgICAgICAKICAgICAgICBhdHRyX2xhYmVsID0gbGFiZWwKICAgICAgICBhdHRyX3ZhbHVlID0gU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pCgogICAgICAgICMgc2ltaWxhciB0byBEaWN0LCBidXQgc2ltcGxlciBjYWxsIGZvcm1hdAogICAgICAgIHJlc3VsdCA9IGRpY3RPZihhdHRyX2xhYmVsLCBhdHRyX3ZhbHVlKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKQogICAgICAgIHByaW50KHJlc3VsdC5zaGFwZSkgICMgb2JqZWN0IGF0dHJpYnV0ZSBhY2Nlc3Mgd29ya3MgdG9vCiAgICAgICAgcHJpbnQocmVzdWx0LmFzRGljdCgpKQogICAgcHJpbnRzOjoKICAgICAgICBbWydzaGFwZScsICdTUVVBUkUnXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXSwgWydjb2xvcicsICdsaWdodCBibHVlJ10sIFsndGV4dHVyZScsICdidXJsYXAnXV0KICAgICAgICAtIGNvbG9yOiBsaWdodCBibHVlCiAgICAgICAgLSBwb3NuOiB1cHBlciBsZWZ0CiAgICAgICAgLSBzaGFwZTogU1FVQVJFCiAgICAgICAgLSB0ZXh0dXJlOiBidXJsYXAKICAgICAgICBTUVVBUkUKICAgICAgICBTUVVBUkUKICAgICAgICB7J2NvbG9yJzogJ2xpZ2h0IGJsdWUnLCAnc2hhcGUnOiAnU1FVQVJFJywgJ3Bvc24nOiAndXBwZXIgbGVmdCcsICd0ZXh0dXJlJzogJ2J1cmxhcCd9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ZXIgdG8gZGVmaW5lIGEgcGFyc2UgYWN0aW9uIGJ5IG1hcHBpbmcgYSBmdW5jdGlvbiB0byBhbGwgZWxlbWVudHMgb2YgYSBQYXJzZVJlc3VsdHMgbGlzdC5JZiBhbnkgYWRkaXRpb25hbCAKICAgIGFyZ3MgYXJlIHBhc3NlZCwgdGhleSBhcmUgZm9yd2FyZGVkIHRvIHRoZSBnaXZlbiBmdW5jdGlvbiBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhZnRlcgogICAgdGhlIHRva2VuLCBhcyBpbiBDe2hleF9pbnRlZ2VyID0gV29yZChoZXhudW1zKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChpbnQsIDE2KSl9LCB3aGljaCB3aWxsIGNvbnZlcnQgdGhlCiAgICBwYXJzZWQgZGF0YSB0byBhbiBpbnRlZ2VyIHVzaW5nIGJhc2UgMTYuCgogICAgRXhhbXBsZSAoY29tcGFyZSB0aGUgbGFzdCB0byBleGFtcGxlIGluIEx7UGFyc2VyRWxlbWVudC50cmFuc2Zvcm1TdHJpbmd9OjoKICAgICAgICBoZXhfaW50cyA9IE9uZU9yTW9yZShXb3JkKGhleG51bXMpKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChpbnQsIDE2KSkKICAgICAgICBoZXhfaW50cy5ydW5UZXN0cygnJycKICAgICAgICAgICAgMDAgMTEgMjIgYWEgRkYgMGEgMGQgMWEKICAgICAgICAgICAgJycnKQogICAgICAgIAogICAgICAgIHVwcGVyd29yZCA9IFdvcmQoYWxwaGFzKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIudXBwZXIpKQogICAgICAgIE9uZU9yTW9yZSh1cHBlcndvcmQpLnJ1blRlc3RzKCcnJwogICAgICAgICAgICBteSBraW5nZG9tIGZvciBhIGhvcnNlCiAgICAgICAgICAgICcnJykKCiAgICAgICAgd2QgPSBXb3JkKGFscGhhcykuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnRpdGxlKSkKICAgICAgICBPbmVPck1vcmUod2QpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKS5ydW5UZXN0cygnJycKICAgICAgICAg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ZSBhY3Rpb24gdG8gYmUgdXNlZCB3aXRoIHN0YXJ0IHRhZ3MgY3JlYXRlZAogICAgd2l0aCBDe0x7bWFrZVhNTFRhZ3N9fSBvciBDe0x7bWFrZUhUTUxUYWdzfX0uIFVzZSBDe3dpdGhBdHRyaWJ1dGV9IHRvIHF1YWxpZnkgYSBzdGFydGluZyB0YWcKICAgIHdpdGggYSByZXF1aXJlZCBhdHRyaWJ1dGUgdmFsdWUsIHRvIGF2b2lkIGZhbHNlIG1hdGNoZXMgb24gY29tbW9uIHRhZ3Mgc3VjaCBhcwogICAgQ3s8VEQ+fSBvciBDezxESVY+fS4KCiAgICBDYWxsIEN7d2l0aEF0dHJpYnV0ZX0gd2l0aCBhIHNlcmllcyBvZiBhdHRyaWJ1dGUgbmFtZXMgYW5kIHZhbHVlcy4gU3BlY2lmeSB0aGUgbGlzdAogICAgb2YgZmlsdGVyIGF0dHJpYnV0ZXMgbmFtZXMgYW5kIHZhbHVlcyBhczoKICAgICAtIGtleXdvcmQgYXJndW1lbnRzLCBhcyBpbiBDeyhhbGlnbj0icmlnaHQiKX0sIG9yCiAgICAgLSBhcyBhbiBleHBsaWNpdCBkaWN0IHdpdGggQ3sqKn0gb3BlcmF0b3IsIHdoZW4gYW4gYXR0cmlidXRlIG5hbWUgaXMgYWxzbyBhIFB5dGhvbgogICAgICAgICAgcmVzZXJ2ZWQgd29yZCwgYXMgaW4gQ3sqKnsiY2xhc3MiOiJDdXN0b21lciIsICJhbGlnbiI6InJpZ2h0In19CiAgICAgLSBhIGxpc3Qgb2YgbmFtZS12YWx1ZSB0dXBsZXMsIGFzIGluICggKCJuczE6Y2xhc3MiLCAiQ3VzdG9tZXIiKSwgKCJuczI6YWxpZ24iLCJyaWdodCIpICkKICAgIEZvciBhdHRyaWJ1dGUgbmFtZXMgd2l0aCBhIG5hbWVzcGFjZSBwcmVmaXgsIHlvdSBtdXN0IHVzZSB0aGUgc2Vjb25kIGZvcm0uICBBdHRyaWJ1dGUKICAgIG5hbWVzIGFyZSBtYXRjaGVkIGluc2Vuc2l0aXZlIHRvIHVwcGVyL2xvd2VyIGNhc2UuCiAgICAgICAKICAgIElmIGp1c3QgdGVzdGluZyBmb3IgQ3tjbGFzc30gKHdpdGggb3Igd2l0aG91dCBhIG5hbWVzcGFjZSksIHVzZSBDe0x7d2l0aENsYXNzfX0uCgogICAgVG8gdmVyaWZ5IHRoYXQgdGhlIGF0dHJpYnV0ZSBleGlzdHMsIGJ1dCB3aXRob3V0IHNwZWNpZnlpbmcgYSB2YWx1ZSwgcGFzcwogICAgQ3t3aXRoQXR0cmlidXRlLkFOWV9WQUxVRX0gYXMgdGhlIHZhbHVlLgoKICAgIEV4YW1wbGU6OgogICAgICAgIGh0bWwgPSAnJycKICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgU29tZSB0ZXh0CiAgICAgICAgICAgIDxkaXYgdHlwZT0iZ3JpZCI+MSA0IDAgMSAwPC9kaXY+CiAgICAgICAgICAgIDxkaXYgdHlwZT0iZ3JhcGgiPjEsMyAyLDMgMSwxPC9kaXY+CiAgICAgICAgICAgIDxkaXY+dGhpcyBoYXMgbm8gdHlwZTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICcnJwogICAgICAgIGRpdixkaXZfZW5kID0gbWFrZUhUTUxUYWdzKCJkaXYiKQoKICAgICAgICAjIG9ubHkgbWF0Y2ggZGl2IHRhZyBoYXZpbmcgYSB0eXBlIGF0dHJpYnV0ZSB3aXRoIHZhbHVlICJncmlkIgogICAgICAgIGRpdl9ncmlkID0gZGl2KCkuc2V0UGFyc2VBY3Rpb24od2l0aEF0dHJpYnV0ZSh0eXBlPSJncmlkIikpCiAgICAgICAgZ3JpZF9leHByID0gZGl2X2dyaWQgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBncmlkX2hlYWRlciBpbiBncmlkX2V4cHIuc2VhcmNoU3RyaW5nKGh0bWwpOgogICAgICAgICAgICBwcmludChncmlkX2hlYWRlci5ib2R5KQogICAgICAgIAogICAgICAgICMgY29uc3RydWN0IGEgbWF0Y2ggd2l0aCBhbnkgZGl2IHRhZyBoYXZpbmcgYSB0eXBlIGF0dHJpYnV0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUKICAgICAgICBkaXZfYW55X3R5cGUgPSBkaXYoKS5zZXRQYXJzZUFjdGlvbih3aXRoQXR0cmlidXRlKHR5cGU9d2l0aEF0dHJpYnV0ZS5BTllfVkFMVUUpKQogICAgICAgIGRpdl9leHByID0gZGl2X2FueV90eXBlICsgU2tpcFRvKGRpdiB8IGRpdl9lbmQpKCJib2R5IikKICAgICAgICBmb3IgZGl2X2hlYWRlciBpbiBkaXZfZXhwci5zZWFyY2hTdHJpbmcoaHRtbCk6CiAgICAgICAgICAgIHByaW50KGRpdl9oZWFkZXIuYm9keSkKICAgIHByaW50czo6CiAgICAgICAgMSA0IDAgMSAwCgogICAgICAgIDEgNCAwIDEgMAogICAgICAgIDEsMyAyLDMgMSwxCiAgICBOYwEAAAAAAAAAAwAAAAQAAABTAAAAcxgAAABnAHwAXRBcAn0BfQJ8AXwCZgKRAnEEUwBydwAAAHJ3AAAAKQNyhQAAAHLVAAAActAAAABydwAAAHJ3AAAAcngAAABy0QAAAFETAABzAgAAAAYAeiF3aXRoQXR0cmlidXRlLjxsb2NhbHM+LjxsaXN0Y29tcD5jAwAAAAAAAAAFAAAACAAAABMAAABzXgAAAHhYiABEAF1QXAJ9A30EfAN8AmsHciZ0AHwAfAFkAXwDFwCDA4IBfAR0AWoCawNyBnwCfAMZAHwEawNyBnQAfAB8AWQCfAN8AnwDGQB8BGYDFgCDA4IBcQZXAGQAUwApA056Fm5vIG1hdGNoaW5nIGF0dHJpYnV0ZSB6K2F0dHJpYnV0ZSAnJXMnIGhhcyB2YWx1ZSAnJXMnLCBtdXN0IGJlICclcycpA3IfAAAAcmUAAADaCUFOWV9WQUxVRSkFcooAAAByNQEAAHKIAQAAWghhdHRyTmFtZVoJYXR0clZhbHVlKQHaBWF0dHJzcncAAAByeAAAAHJ9AQAAUhMAAHMMAAAAAAEOAQgBEAEWAQgBehl3aXRoQXR0cmlidXRlLjxsb2NhbHM+LnBhKQFy3AAAACkDcp0AAABaCGF0dHJEaWN0cn0BAABydwAAACkBcooCAAByeAAAAHJlAAAAGxMAAHMMAAAAADIEAQ4CCAEOAQwHYwIAAAAAAAAAAwAAAAQAAABDAAAAcx4AAAB8AXIMZAF8ARYAbgJkAn0CdABmAHwCfABpAY4BUwApA2HjAwAACiAgICBTaW1wbGlmaWVkIHZlcnNpb24gb2YgQ3tMe3dpdGhBdHRyaWJ1dGV9fSB3aGVuIG1hdGNoaW5nIG9uIGEgZGl2IGNsYXNzIC0gbWFkZQogICAgZGlmZmljdWx0IGJlY2F1c2UgQ3tjbGFzc30gaXMgYSByZXNlcnZlZCB3b3JkIGluIFB5dGhvbi4KCiAgICBFeGFtcGxlOjoKICAgICAgICBodG1sID0gJycnCiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIFNvbWUgdGV4dAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkIj4xIDQgMCAxIDA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3JhcGgiPjEsMyAyLDMgMSwxPC9kaXY+CiAgICAgICAgICAgIDxkaXY+dGhpcyAmbHQ7ZGl2Jmd0OyBoYXMgbm8gY2xhc3M8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAnJycKICAgICAgICBkaXYsZGl2X2VuZCA9IG1ha2VIVE1MVGFncygiZGl2IikKICAgICAgICBkaXZfZ3JpZCA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhDbGFzcygiZ3JpZCIpKQogICAgICAgIAogICAgICAgIGdyaWRfZXhwciA9IGRpdl9ncmlkICsgU2tpcFRvKGRpdiB8IGRpdl9lbmQpKCJib2R5IikKICAgICAgICBmb3IgZ3JpZF9oZWFkZXIgaW4gZ3JpZF9leHByLnNlYXJjaFN0cmluZyhodG1sKToKICAgICAgICAgICAgcHJpbnQoZ3JpZF9oZWFkZXIuYm9keSkKICAgICAgICAKICAgICAgICBkaXZfYW55X3R5cGUgPSBkaXYoKS5zZXRQYXJzZUFjdGlvbih3aXRoQ2xhc3Mod2l0aEF0dHJpYnV0ZS5BTllfVkFMVUUpKQogICAgICAgIGRpdl9leHByID0gZGl2X2FueV90eXBlICsgU2tpcFRvKGRpdiB8IGRpdl9lbmQpKCJib2R5IikKICAgICAgICBmb3IgZGl2X2hlYWRlciBpbiBkaXZfZXhwci5zZWFyY2hTdHJpbmcoaHRtbCk6CiAgICAgICAgICAgIHByaW50KGRpdl9oZWFkZXIuYm9keSkKICAgIHByaW50czo6CiAgICAgICAgMSA0IDAgMSAwCgogICAgICAgIDEgNCAwIDEgMAogICAgICAgIDEsMyAyLDMgMSwxCiAgICB6CCVzOmNsYXNz2gVjbGFzcykBcmUAAAApA1oJY2xhc3NuYW1l2gluYW1lc3BhY2VaCWNsYXNzYXR0cnJ3AAAAcncAAAByeAAAAHJrAAAAXBMAAHMEAAAAACAQAfoBKHIaAgAAYwQAAAAAAAAAEQAAAAcAAABDAAAAc4YCAAB0AIMAfQR8AHwCfAQXAHwDFwBCAH0FkAJ4YHQBfAGDAUQAkAJdUlwCfQZ9B3wHZAsXAGQBZAKFAhkAXAR9CH0JfQp9C3wJZANrAHJUZAR8CBYAbgZkBXwIFgB9DHwJZANrAnKIfAhkAWsIc3h0AnwIgwFkBmsDcoB0A2QHgwGCAXwIXAJ9DX0OdACDAGoEfAyDAX0PfAp0BWoGawKQAXJkfAlkCGsCcsZ0B3wFfAgXAIMBdAh8BXQJfAiDARcAgwEXAH0Qbpx8CWQGawKQAXIefAhkAWsJkAFyAHQHfAV8CBcAfAUXAIMBdAh8BXQJfAh8BRcAgwEXAIMBFwB9EG4cdAd8BXwFFwCDAXQIfAV0CXwFgwEXAIMBFwB9EG5EfAlkA2sCkAFyWnQHfAV8DRcAfAUXAHwOFwB8BRcAgwF0CHwFfA0XAHwFFwB8DhcAfAUXAIMBFwB9EG4IdANkCYMBggFu7HwKdAVqCmsCkAJySHwJZAhrApABcqp0C3wIdAyDApABc450DHwIgwF9CHQHfAhqDXwPFwCDAXQIfAh8DxcAgwEXAH0Qbpx8CWQGawKQAnICfAhkAWsJkAFy5HQHfAV8CBcAfA8XAIMBdAh8BXQJfAh8DxcAgwEXAIMBFwB9EG4cdAd8BXwPFwCDAXQIfAV0CXwPgwEXAIMBFwB9EG5EfAlkA2sCkAJyPnQHfAV8DRcAfA8XAHwOFwB8DxcAgwF0CHwFfA0XAHwPFwB8DhcAfA8XAIMBFwB9EG4IdANkCYMBggFuCHQDZAqDAYIBfAuQAnJgfBBqDnwLgwEBAHwPfBBqBHwMgwF8BUIASwB9D3wPfQVxIlcAfAR8BUsAfQR8BFMAKQxhnAkAAAogICAgSGVscGVyIG1ldGhvZCBmb3IgY29uc3RydWN0aW5nIGdyYW1tYXJzIG9mIGV4cHJlc3Npb25zIG1hZGUgdXAgb2YKICAgIG9wZXJhdG9ycyB3b3JraW5nIGluIGEgcHJlY2VkZW5jZSBoaWVyYXJjaHkuICBPcGVyYXRvcnMgbWF5IGJlIHVuYXJ5IG9yCiAgICBiaW5hcnksIGxlZnQtIG9yIHJpZ2h0LWFzc29jaWF0aXZlLiAgUGFyc2UgYWN0aW9ucyBjYW4gYWxzbyBiZSBhdHRhY2hlZAogICAgdG8gb3BlcmF0b3IgZXhwcmVzc2lvbnMuIFRoZSBnZW5lcmF0ZWQgcGFyc2VyIHdpbGwgYWxzbyByZWNvZ25pemUgdGhlIHVzZSAKICAgIG9mIHBhcmVudGhlc2VzIHRvIG92ZXJyaWRlIG9wZXJhdG9yIHByZWNlZGVuY2VzIChzZWUgZXhhbXBsZSBiZWxvdykuCiAgICAKICAgIE5vdGU6IGlmIHlvdSBkZWZpbmUgYSBkZWVwIG9wZXJhdG9yIGxpc3QsIHlvdSBtYXkgc2VlIHBlcmZvcm1hbmNlIGlzc3VlcwogICAgd2hlbiB1c2luZyBpbmZpeE5vdGF0aW9uLiBTZWUgTHtQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXR9IGZvciBhCiAgICBtZWNoYW5pc20gdG8gcG90ZW50aWFsbHkgaW1wcm92ZSB5b3VyIHBhcnNlciBwZXJmb3JtYW5jZS4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gYmFzZUV4cHIgLSBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgbW9zdCBiYXNpYyBlbGVtZW50IGZvciB0aGUgbmVzdGVkCiAgICAgLSBvcExpc3QgLSBsaXN0IG9mIHR1cGxlcywgb25lIGZvciBlYWNoIG9wZXJhdG9yIHByZWNlZGVuY2UgbGV2ZWwgaW4gdGhlCiAgICAgIGV4cHJlc3Npb24gZ3JhbW1hcjsgZWFjaCB0dXBsZSBpcyBvZiB0aGUgZm9ybQogICAgICAob3BFeHByLCBudW1UZXJtcywgcmlnaHRMZWZ0QXNzb2MsIHBhcnNlQWN0aW9uKSwgd2hlcmU6CiAgICAgICAtIG9wRXhwciBpcyB0aGUgcHlwYXJzaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBvcGVyYXRvcjsKICAgICAgICAgIG1heSBhbHNvIGJlIGEgc3RyaW5nLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIExpdGVyYWw7CiAgICAgICAgICBpZiBudW1UZXJtcyBpcyAzLCBvcEV4cHIgaXMgYSB0dXBsZSBvZiB0d28gZXhwcmVzc2lvbnMsIGZvciB0aGUKICAgICAgICAgIHR3byBvcGVyYXRvcnMgc2VwYXJhdGluZyB0aGUgMyB0ZXJtcwogICAgICAgLSBudW1UZXJtcyBpcyB0aGUgbnVtYmVyIG9mIHRlcm1zIGZvciB0aGlzIG9wZXJhdG9yIChtdXN0CiAgICAgICAgICBiZSAxLCAyLCBvciAzKQogICAgICAgLSByaWdodExlZnRBc3NvYyBpcyB0aGUgaW5kaWNhdG9yIHdoZXRoZXIgdGhlIG9wZXJhdG9yIGlzCiAgICAgICAgICByaWdodCBvciBsZWZ0IGFzc29jaWF0aXZlLCB1c2luZyB0aGUgcHlwYXJzaW5nLWRlZmluZWQKICAgICAgICAgIGNvbnN0YW50cyBDe29wQXNzb2MuUklHSFR9IGFuZCBDe29wQXNzb2MuTEVGVH0uCiAgICAgICAtIHBhcnNlQWN0aW9uIGlzIHRoZSBwYXJzZSBhY3Rpb24gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgICBleHByZXNzaW9ucyBtYXRjaGluZyB0aGlzIG9wZXJhdG9yIGV4cHJlc3Npb24gKHRoZQogICAgICAgICAgcGFyc2UgYWN0aW9uIHR1cGxlIG1lbWJlciBtYXkgYmUgb21pdHRlZCkKICAgICAtIGxwYXIgLSBleHByZXNzaW9uIGZvciBtYXRjaGluZyBsZWZ0LXBhcmVudGhlc2VzIChkZWZhdWx0PUN7U3VwcHJlc3MoJygnKX0pCiAgICAgLSBycGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgcmlnaHQtcGFyZW50aGVzZXMgKGRlZmF1bHQ9Q3tTdXBwcmVzcygnKScpfSkKCiAgICBFeGFtcGxlOjoKICAgICAgICAjIHNpbXBsZSBleGFtcGxlIG9mIGZvdXItZnVuY3Rpb24gYXJpdGhtZXRpYyB3aXRoIGludHMgYW5kIHZhcmlhYmxlIG5hbWVzCiAgICAgICAgaW50ZWdlciA9IHB5cGFyc2luZ19jb21tb24uc2lnbmVkX2ludGVnZXIKICAgICAgICB2YXJuYW1lID0gcHlwYXJzaW5nX2NvbW1vbi5pZGVudGlmaWVyIAogICAgICAgIAogICAgICAgIGFyaXRoX2V4cHIgPSBpbmZpeE5vdGF0aW9uKGludGVnZXIgfCB2YXJuYW1lLAogICAgICAgICAgICBbCiAgICAgICAgICAgICgnLScsIDEsIG9wQXNzb2MuUklHSFQpLAogICAgICAgICAgICAob25lT2YoJyogLycpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICAob25lT2YoJysgLScpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICBdKQogICAgICAgIAogICAgICAgIGFyaXRoX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgIDUrMyo2CiAgICAgICAgICAgICg1KzMpKjYKICAgICAgICAgICAgLTItLTExCiAgICAgICAgICAgICcnJywgZnVsbER1bXA9RmFsc2UpCiAgICBwcmludHM6OgogICAgICAgIDUrMyo2CiAgICAgICAgW1s1LCAnKycsIFszLCAnKicsIDZdXV0KCiAgICAgICAgKDUrMykqNgogICAgICAgIFtbWzUsICcrJywgM10sICcqJywgNl1dCgogICAgICAgIC0yLS0xMQogICAgICAgIFtbWyctJywgMl0sICctJywgWyctJywgMTFdXV0KICAgIE5yEAIAAHJvAAAAegclcyB0ZXJtegklcyVzIHRlcm1ycQAAAHpAaWYgbnVtdGVybXM9Mywgb3BFeHByIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0IG9mIHR3byBleHByZXNzaW9uc3JyAAAAejZvcGVyYXRvciBtdXN0IGJlIHVuYXJ5ICgxKSwgYmluYXJ5ICgyKSwgb3IgdGVybmFyeSAoMyl6Mm9wZXJhdG9yIG11c3QgaW5kaWNhdGUgcmlnaHQgb3IgbGVmdCBhc3NvY2lhdGl2aXR5KQFOKQ9yDwAAAHLdAAAActgAAAByugEAAHJpAQAAclQAAADaBExFRlRyDgAAAHIRAAAAchkAAADaBVJJR0hUcnoAAAByGwAAAHIuAQAAcoAAAAApEVoIYmFzZUV4cHJaBm9wTGlzdFoEbHBhcloEcnBhcnKDAAAAWghsYXN0RXhwcnK2AAAAWgdvcGVyRGVmWgZvcEV4cHJaBWFyaXR5Wg5yaWdodExlZnRBc3NvY3J9AQAAWgh0ZXJtTmFtZVoHb3BFeHByMVoHb3BFeHByMloIdGhpc0V4cHJycwIAAHJ3AAAAcncAAAByeAAAAHJpAAAAgxMAAHNSAAAAADsGARABFgEYARgBCAEUAQgBCAEMAQwBCAEeAQoBCgEmAh4BCgEWARwCCgEMAQoCDAEIARwBCgEKASYCHgEKARYBHAIKAggBBgEKARIBCAEIAXo0Iig/OlteIlxuXHJcXF18KD86IiIpfCg/OlxcKD86W154XXx4WzAtOWEtZkEtRl0rKSkpKvoBInogc3RyaW5nIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXN6NCcoPzpbXidcblxyXFxdfCg/OicnKXwoPzpcXCg/OlteeF18eFswLTlhLWZBLUZdKykpKSr6ASd6IHN0cmluZyBlbmNsb3NlZCBpbiBzaW5nbGUgcXVvdGVzeipxdW90ZWRTdHJpbmcgdXNpbmcgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXPaAXV6FnVuaWNvZGUgc3RyaW5nIGxpdGVyYWxjBAAAAAAAAAAFAAAABwAAAEMAAABznAEAAHwAfAFrAnIQdABkAYMBggF8AmQCawiQAXIodAF8AHQCgwJvLHQBfAF0AoMCkAFyIHQDfACDAWQDawJypnQDfAGDAWQDawJypnwDZAJrCXKAdAR0BXwDDwB0BnwAfAEXAHQHaggXAGQDZASNAhcAgwGDAWoJZAVkBoQAgwF9Am4kdApqC4MAdAZ8AHwBFwB0B2oIFwCDAWoJZAdkBoQAgwEXAH0Cbnh8A2QCawly6nQEdAV8Aw8AdAx8AIMBDwAXAHQMfAGDAQ8AFwB0BnQHaghkA2QEjQIXAIMBgwFqCWQIZAaEAIMBfQJuNHQEdAV0DHwAgwEPAHQMfAGDAQ8AFwB0BnQHaghkA2QEjQIXAIMBgwFqCWQJZAaEAIMBfQJuCHQAZAqDAYIBdA2DAH0EfANkAmsJkAFyYnwEdA50D3wAgwF0EHwDfARCAHwCQgCDARcAdA98AYMBFwCDAUsAfQRuJHwEdA50D3wAgwF0EHwEfAJCAIMBFwB0D3wBgwEXAIMBSwB9BHwEahFkC3wAfAFmAhYAgwEBAHwEUwApDGF+CQAACiAgICBIZWxwZXIgbWV0aG9kIGZvciBkZWZpbmluZyBuZXN0ZWQgbGlzdHMgZW5jbG9zZWQgaW4gb3BlbmluZyBhbmQgY2xvc2luZwogICAgZGVsaW1pdGVycyAoIigiIGFuZCAiKSIgYXJlIHRoZSBkZWZhdWx0KS4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gb3BlbmVyIC0gb3BlbmluZyBjaGFyYWN0ZXIgZm9yIGEgbmVzdGVkIGxpc3QgKGRlZmF1bHQ9Q3siKCJ9KTsgY2FuIGFsc28gYmUgYSBweXBhcnNpbmcgZXhwcmVzc2lvbgogICAgIC0gY2xvc2VyIC0gY2xvc2luZyBjaGFyYWN0ZXIgZm9yIGEgbmVzdGVkIGxpc3QgKGRlZmF1bHQ9Q3siKSJ9KTsgY2FuIGFsc28gYmUgYSBweXBhcnNpbmcgZXhwcmVzc2lvbgogICAgIC0gY29udGVudCAtIGV4cHJlc3Npb24gZm9yIGl0ZW1zIHdpdGhpbiB0aGUgbmVzdGVkIGxpc3RzIChkZWZhdWx0PUN7Tm9uZX0pCiAgICAgLSBpZ25vcmVFeHByIC0gZXhwcmVzc2lvbiBmb3IgaWdub3Jpbmcgb3BlbmluZyBhbmQgY2xvc2luZyBkZWxpbWl0ZXJzIChkZWZhdWx0PUN7cXVvdGVkU3RyaW5nfSkKCiAgICBJZiBhbiBleHByZXNzaW9uIGlzIG5vdCBwcm92aWRlZCBmb3IgdGhlIGNvbnRlbnQgYXJndW1lbnQsIHRoZSBuZXN0ZWQKICAgIGV4cHJlc3Npb24gd2lsbCBjYXB0dXJlIGFsbCB3aGl0ZXNwYWNlLWRlbGltaXRlZCBjb250ZW50IGJldHdlZW4gZGVsaW1pdGVycwogICAgYXMgYSBsaXN0IG9mIHNlcGFyYXRlIHZhbHVlcy4KCiAgICBVc2UgdGhlIEN7aWdub3JlRXhwcn0gYXJndW1lbnQgdG8gZGVmaW5lIGV4cHJlc3Npb25zIHRoYXQgbWF5IGNvbnRhaW4KICAgIG9wZW5pbmcgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIG9wZW5pbmcKICAgIG9yIGNsb3NpbmcgY2hhcmFjdGVycyBmb3IgbmVzdGluZywgc3VjaCBhcyBxdW90ZWRTdHJpbmcgb3IgYSBjb21tZW50CiAgICBleHByZXNzaW9uLiAgU3BlY2lmeSBtdWx0aXBsZSBleHByZXNzaW9ucyB1c2luZyBhbiBDe0x7T3J9fSBvciBDe0x7TWF0Y2hGaXJzdH19LgogICAgVGhlIGRlZmF1bHQgaXMgTHtxdW90ZWRTdHJpbmd9LCBidXQgaWYgbm8gZXhwcmVzc2lvbnMgYXJlIHRvIGJlIGlnbm9yZWQsCiAgICB0aGVuIHBhc3MgQ3tOb25lfSBmb3IgdGhpcyBhcmd1bWVudC4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3R5cGUgPSBvbmVPZigidm9pZCBpbnQgc2hvcnQgbG9uZyBjaGFyIGZsb2F0IGRvdWJsZSIpCiAgICAgICAgZGVjbF9kYXRhX3R5cGUgPSBDb21iaW5lKGRhdGFfdHlwZSArIE9wdGlvbmFsKFdvcmQoJyonKSkpCiAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcysnXycsIGFscGhhbnVtcysnXycpCiAgICAgICAgbnVtYmVyID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIKICAgICAgICBhcmcgPSBHcm91cChkZWNsX2RhdGFfdHlwZSArIGlkZW50KQogICAgICAgIExQQVIsUlBBUiA9IG1hcChTdXBwcmVzcywgIigpIikKCiAgICAgICAgY29kZV9ib2R5ID0gbmVzdGVkRXhwcigneycsICd9JywgaWdub3JlRXhwcj0ocXVvdGVkU3RyaW5nIHwgY1N0eWxlQ29tbWVudCkpCgogICAgICAgIGNfZnVuY3Rpb24gPSAoZGVjbF9kYXRhX3R5cGUoInR5cGUiKSAKICAgICAgICAgICAgICAgICAgICAgICsgaWRlbnQoIm5hbWUiKQogICAgICAgICAgICAgICAgICAgICAgKyBMUEFSICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChhcmcpLCBbXSkoImFyZ3MiKSArIFJQQVIgCiAgICAgICAgICAgICAgICAgICAgICArIGNvZGVfYm9keSgiYm9keSIpKQogICAgICAgIGNfZnVuY3Rpb24uaWdub3JlKGNTdHlsZUNvbW1lbnQpCiAgICAgICAgCiAgICAgICAgc291cmNlX2NvZGUgPSAnJycKICAgICAgICAgICAgaW50IGlzX29kZChpbnQgeCkgeyAKICAgICAgICAgICAgICAgIHJldHVybiAoeCUyKTsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICBpbnQgZGVjX3RvX2hleChjaGFyIGhjaGFyKSB7IAogICAgICAgICAgICAgICAgaWYgKGhjaGFyID49ICcwJyAmJiBoY2hhciA8PSAnOScpIHsgCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvcmQoaGNoYXIpLW9yZCgnMCcpKTsgCiAgICAgICAgICAgICAgICB9IGVsc2UgeyAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEwK29yZChoY2hhciktb3JkKCdBJykpOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgfQogICAgICAgICcnJwogICAgICAgIGZvciBmdW5jIGluIGNfZnVuY3Rpb24uc2VhcmNoU3RyaW5nKHNvdXJjZV9jb2RlKToKICAgICAgICAgICAgcHJpbnQoIiUobmFtZSlzICglKHR5cGUpcykgYXJnczogJShhcmdzKXMiICUgZnVuYykKCiAgICBwcmludHM6OgogICAgICAgIGlzX29kZCAoaW50KSBhcmdzOiBbWydpbnQnLCAneCddXQogICAgICAgIGRlY190b19oZXggKGludCkgYXJnczogW1snY2hhcicsICdoY2hhciddXQogICAgei5vcGVuaW5nIGFuZCBjbG9zaW5nIHN0cmluZ3MgY2Fubm90IGJlIHRoZSBzYW1lTnJyAAAAKQFyDQIAAGMBAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAagCDAFMAKQJOcgEAAAApAXKrAAAAKQFydgAAAHJ3AAAAcncAAAByeAAAAHJ5AAAAORQAAHMAAAAAehxuZXN0ZWRFeHByLjxsb2NhbHM+LjxsYW1iZGE+YwEAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQBqAIMAUwApAk5yAQAAACkBcqsAAAApAXJ2AAAAcncAAABydwAAAHJ4AAAAcnkAAAA8FAAAcwAAAABjAQAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAGoAgwBTACkCTnIBAAAAKQFyqwAAACkBcnYAAABydwAAAHJ3AAAAcngAAAByeQAAAEIUAABzAAAAAGMBAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAagCDAFMAKQJOcgEAAAApAXKrAAAAKQFydgAAAHJ3AAAAcncAAAByeAAAAHJ5AAAARhQAAHMAAAAAek9vcGVuaW5nIGFuZCBjbG9zaW5nIGFyZ3VtZW50cyBtdXN0IGJlIHN0cmluZ3MgaWYgbm8gY29udGVudCBleHByZXNzaW9uIGlzIGdpdmVuehZuZXN0ZWQgJXMlcyBleHByZXNzaW9uKRJyugEAAHJ6AAAAcssAAABy2AAAAHIKAAAAchkAAAByCQAAAHIkAAAAck4BAABygAAAAHJDAAAAcswAAAByFQAAAHIPAAAAchEAAAByKwAAAHIyAAAAcmkBAAApBdoGb3BlbmVyWgZjbG9zZXJaB2NvbnRlbnRyTwIAAHKDAAAAcncAAABydwAAAHJ4AAAAclAAAAD3EwAAczQAAAAAOggBCAEKARYBGAEIAQgBHAEMAhgBDgIIAQQBGAEUAQwCFgEUAQwCCAEGAQoBKgIkARIBYwMAAAAAAAAACwAAAAYAAAADAAAAc+QAAACHAGYBZAFkAoQIfQOHAGYBZANkBIQIfQSHAGYBZAVkBoQIfQV0AHQBgwBqAmQHgwFqA4MAgwF9BnQEgwB0BIMAagV8BIMBFwBqBmQIgwF9B3QEgwBqBXwDgwFqBmQJgwF9CHQEgwBqBXwFgwFqBmQKgwF9CXwCcqZ0B3QIfAaDAXwHFwB0AHwIdAd8AIMBFwB0CHwGgwEXAIMBFwB8CRcAgwF9Cm4kdAd0CHwGgwF0AHwIdAd8AIMBFwB0CHwGgwEXAIMBFwCDAX0KfABqCXQKdAGDABcAgwEBAHwKagZkC4MBUwApDGEKCQAACiAgICBIZWxwZXIgbWV0aG9kIGZvciBkZWZpbmluZyBzcGFjZS1kZWxpbWl0ZWQgaW5kZW50YXRpb24gYmxvY2tzLCBzdWNoIGFzCiAgICB0aG9zZSB1c2VkIHRvIGRlZmluZSBibG9jayBzdGF0ZW1lbnRzIGluIFB5dGhvbiBzb3VyY2UgY29kZS4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gYmxvY2tTdGF0ZW1lbnRFeHByIC0gZXhwcmVzc2lvbiBkZWZpbmluZyBzeW50YXggb2Ygc3RhdGVtZW50IHRoYXQKICAgICAgICAgICAgaXMgcmVwZWF0ZWQgd2l0aGluIHRoZSBpbmRlbnRlZCBibG9jawogICAgIC0gaW5kZW50U3RhY2sgLSBsaXN0IGNyZWF0ZWQgYnkgY2FsbGVyIHRvIG1hbmFnZSBpbmRlbnRhdGlvbiBzdGFjawogICAgICAgICAgICAobXVsdGlwbGUgc3RhdGVtZW50V2l0aEluZGVudGVkQmxvY2sgZXhwcmVzc2lvbnMgd2l0aGluIGEgc2luZ2xlIGdyYW1tYXIKICAgICAgICAgICAgc2hvdWxkIHNoYXJlIGEgY29tbW9uIGluZGVudFN0YWNrKQogICAgIC0gaW5kZW50IC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYmxvY2sgbXVzdCBiZSBpbmRlbnRlZCBiZXlvbmQgdGhlCiAgICAgICAgICAgIHRoZSBjdXJyZW50IGxldmVsOyBzZXQgdG8gRmFsc2UgZm9yIGJsb2NrIG9mIGxlZnQtbW9zdCBzdGF0ZW1lbnRzCiAgICAgICAgICAgIChkZWZhdWx0PUN7VHJ1ZX0pCgogICAgQSB2YWxpZCBibG9jayBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIEN7YmxvY2tTdGF0ZW1lbnR9LgoKICAgIEV4YW1wbGU6OgogICAgICAgIGRhdGEgPSAnJycKICAgICAgICBkZWYgQSh6KToKICAgICAgICAgIEExCiAgICAgICAgICBCID0gMTAwCiAgICAgICAgICBHID0gQTIKICAgICAgICAgIEEyCiAgICAgICAgICBBMwogICAgICAgIEIKICAgICAgICBkZWYgQkIoYSxiLGMpOgogICAgICAgICAgQkIxCiAgICAgICAgICBkZWYgQkJBKCk6CiAgICAgICAgICAgIGJiYTEKICAgICAgICAgICAgYmJhMgogICAgICAgICAgICBiYmEzCiAgICAgICAgQwogICAgICAgIEQKICAgICAgICBkZWYgc3BhbSh4LHkpOgogICAgICAgICAgICAgZGVmIGVnZ3Moeik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICcnJwoKCiAgICAgICAgaW5kZW50U3RhY2sgPSBbMV0KICAgICAgICBzdG10ID0gRm9yd2FyZCgpCgogICAgICAgIGlkZW50aWZpZXIgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgIGZ1bmNEZWNsID0gKCJkZWYiICsgaWRlbnRpZmllciArIEdyb3VwKCAiKCIgKyBPcHRpb25hbCggZGVsaW1pdGVkTGlzdChpZGVudGlmaWVyKSApICsgIikiICkgKyAiOiIpCiAgICAgICAgZnVuY19ib2R5ID0gaW5kZW50ZWRCbG9jayhzdG10LCBpbmRlbnRTdGFjaykKICAgICAgICBmdW5jRGVmID0gR3JvdXAoIGZ1bmNEZWNsICsgZnVuY19ib2R5ICkKCiAgICAgICAgcnZhbHVlID0gRm9yd2FyZCgpCiAgICAgICAgZnVuY0NhbGwgPSBHcm91cChpZGVudGlmaWVyICsgIigiICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChydmFsdWUpKSArICIpIikKICAgICAgICBydmFsdWUgPDwgKGZ1bmNDYWxsIHwgaWRlbnRpZmllciB8IFdvcmQobnVtcykpCiAgICAgICAgYXNzaWdubWVudCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiPSIgKyBydmFsdWUpCiAgICAgICAgc3RtdCA8PCAoIGZ1bmNEZWYgfCBhc3NpZ25tZW50IHwgaWRlbnRpZmllciApCgogICAgICAgIG1vZHVsZV9ib2R5ID0gT25lT3JNb3JlKHN0bXQpCgogICAgICAgIHBhcnNlVHJlZSA9IG1vZHVsZV9ib2R5LnBhcnNlU3RyaW5nKGRhdGEpCiAgICAgICAgcGFyc2VUcmVlLnBwcmludCgpCiAgICBwcmludHM6OgogICAgICAgIFtbJ2RlZicsCiAgICAgICAgICAnQScsCiAgICAgICAgICBbJygnLCAneicsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydBMSddLCBbWydCJywgJz0nLCAnMTAwJ11dLCBbWydHJywgJz0nLCAnQTInXV0sIFsnQTInXSwgWydBMyddXV0sCiAgICAgICAgICdCJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ0JCJywKICAgICAgICAgIFsnKCcsICdhJywgJ2InLCAnYycsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydCQjEnXSwgW1snZGVmJywgJ0JCQScsIFsnKCcsICcpJ10sICc6JywgW1snYmJhMSddLCBbJ2JiYTInXSwgWydiYmEzJ11dXV1dXSwKICAgICAgICAgJ0MnLAogICAgICAgICAnRCcsCiAgICAgICAgIFsnZGVmJywKICAgICAgICAgICdzcGFtJywKICAgICAgICAgIFsnKCcsICd4JywgJ3knLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1tbJ2RlZicsICdlZ2dzJywgWycoJywgJ3onLCAnKSddLCAnOicsIFtbJ3Bhc3MnXV1dXV1dXSAKICAgIGMDAAAAAAAAAAQAAAAEAAAAEwAAAHNOAAAAfAF0AHwAgwFrBXIQZABTAHQBfAF8AIMCfQN8A4gAZAQZAGsDckp8A4gAZAUZAGsEcj50AnwAfAFkAoMDggF0A3wAfAFkA4MDggFkAFMAKQZOcnIAAAB6D2lsbGVnYWwgbmVzdGluZ3oQbm90IGEgcGVlciBlbnRyeXJzAAAAcnMAAAApBHLYAAAAcjkAAAByIQAAAHIfAAAAKQRyigAAAHI1AQAAcnYAAADaBmN1ckNvbCkB2gtpbmRlbnRTdGFja3J3AAAAcngAAADaD2NoZWNrUGVlckluZGVudJ8UAABzDgAAAAABDAAEAQoBDAEMAQwBeiZpbmRlbnRlZEJsb2NrLjxsb2NhbHM+LmNoZWNrUGVlckluZGVudGMDAAAAAAAAAAQAAAAEAAAAEwAAAHMyAAAAdAB8AXwAgwJ9A3wDiABkAxkAawRyIogAagF8A4MBAQBuDHQCfAB8AWQCgwOCAWQAUwApBE5ycgAAAHoObm90IGEgc3ViZW50cnlycwAAACkDcjkAAABy+wAAAHIfAAAAKQRyigAAAHI1AQAAcnYAAABylAIAACkBcpUCAABydwAAAHJ4AAAA2g5jaGVja1N1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CoQAgwGDAVo9ZSllBGQ8ZAqEAIMBgwFaPmQ9UwApQnJuAAAAYa4KAAAKICAgIEhlcmUgYXJlIHNvbWUgY29tbW9uIGxvdy1sZXZlbCBleHByZXNzaW9ucyB0aGF0IG1heSBiZSB1c2VmdWwgaW4ganVtcC1zdGFydGluZyBwYXJzZXIgZGV2ZWxvcG1lbnQ6CiAgICAgLSBudW1lcmljIGZvcm1zIChMe2ludGVnZXJzPGludGVnZXI+fSwgTHtyZWFsczxyZWFsPn0sIEx7c2NpZW50aWZpYyBub3RhdGlvbjxzY2lfcmVhbD59KQogICAgIC0gY29tbW9uIEx7cHJvZ3JhbW1pbmcgaWRlbnRpZmllcnM8aWRlbnRpZmllcj59CiAgICAgLSBuZXR3b3JrIGFkZHJlc3NlcyAoTHtNQUM8bWFjX2FkZHJlc3M+fSwgTHtJUHY0PGlwdjRfYWRkcmVzcz59LCBMe0lQdjY8aXB2Nl9hZGRyZXNzPn0pCiAgICAgLSBJU084NjAxIEx7ZGF0ZXM8aXNvODYwMV9kYXRlPn0gYW5kIEx7ZGF0ZXRpbWU8aXNvODYwMV9kYXRldGltZT59CiAgICAgLSBMe1VVSUQ8dXVpZD59CiAgICAgLSBMe2NvbW1hLXNlcGFyYXRlZCBsaXN0PGNvbW1hX3NlcGFyYXRlZF9saXN0Pn0KICAgIFBhcnNlIGFjdGlvbnM6CiAgICAgLSBDe0x7Y29udmVydFRvSW50ZWdlcn19CiAgICAgLSBDe0x7Y29udmVydFRvRmxvYXR9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0RhdGV9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0RhdGV0aW1lfX0KICAgICAtIEN7THtzdHJpcEhUTUxUYWdzfX0KICAgICAtIEN7THt1cGNhc2VUb2tlbnN9fQogICAgIC0gQ3tMe2Rvd25jYXNlVG9rZW5zfX0KCiAgICBFeGFtcGxlOjoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgdHlwZQogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uZm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyBmbG9hdAogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uaGV4X2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgaGV4IG51bWJlcnMKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIEZGCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mcmFjdGlvbi5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm1peGVkX2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgbWl4ZWQgZnJhY3Rpb25zCiAgICAgICAgICAgIDEKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgMS0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBpbXBvcnQgdXVpZAogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcCh1dWlkLlVVSUQpKQogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyB1dWlkCiAgICAgICAgICAgIDEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OAogICAgICAgICAgICAnJycpCiAgICBwcmludHM6OgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDAuMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgIDEwMAogICAgICAgIFsyNTZdCgogICAgICAgIEZGCiAgICAgICAgWzI1NV0KCiAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAxLzIKICAgICAgICBbMC41XQoKICAgICAgICAtMy80CiAgICAgICAgWy0wLjc1XQoKICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgIDEKICAgICAgICBbMV0KCiAgICAgICAgMS8yCiAgICAgICAgWzAuNV0KCiAgICAgICAgLTMvNAogICAgICAgIFstMC43NV0KCiAgICAgICAgMS0zLzQKICAgICAgICBbMS43NV0KCiAgICAgICAgIyB1dWlkCiAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgW1VVSUQoJzEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OCcpXQogICAg2gdpbnRlZ2VyegtoZXggaW50ZWdlcnJ0AgAAeghbKy1dP1xkK3oOc2lnbmVkIGludGVnZXJygwIAANoIZnJhY3Rpb25jAQAAAAAAAAABAAAAAwAAAEMAAABzEAAAAHwAZAEZAHwAZAMZABsAUwApBE5yAQAAAHJyAAAAcnMAAABydwAAACkBcnYAAABydwAAAHJ3AAAAcngAAAByeQAAAIYVAABzAAAAAHoZcHlwYXJzaW5nX2NvbW1vbi48bGFtYmRhPnI4AgAAeiJmcmFjdGlvbiBvciBtaXhlZCBpbnRlZ2VyLWZyYWN0aW9ueg1bKy1dP1xkK1wuXGQqegtyZWFsIG51bWJlcnorWystXT9cZCsoW2VFXVsrLV0/XGQrfFwuXGQqKFtlRV1bKy1dP1xkKyk/KXokcmVhbCBudW1iZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9ueh1bKy1dP1xkK1wuP1xkKihbZUVdWystXT9cZCspP9oHZm51bWJlcnJCAgAA2gppZGVudGlmaWVyeksoMjVbMC01XXwyWzAtNF1bMC05XXwxP1swLTldezEsMn0pKFwuKDI1WzAtNV18MlswLTRdWzAtOV18MT9bMC05XXsxLDJ9KSl7M316DElQdjQgYWRkcmVzc3oQWzAtOWEtZkEtRl17MSw0fdoLaGV4X2ludGVnZXJyhAIAAOkHAAAAehFmdWxsIElQdjYgYWRkcmVzc3IBAAAAckIBAAB6Ajo6ehJzaG9ydCBJUHY2IGFkZHJlc3NjAQAAAAAAAAABAAAAAwAAAEMAAABzFgAAAHQAZAFkAoQAfABEAIMBgwFkA2sAUwApBE5jAQAAAAAAAAACAAAAAwAAAHMAAABzHgAAAHwAXRZ9AXQAagFqAnwBgwFyAmQAVgABAHECZAFTACkCcnIAAABOKQNybgAAANoKX2lwdjZfcGFydHKqAQAAKQJyhQAAAHJmAgAAcncAAABydwAAAHJ4AAAAcocAAACiFQAAcwIAAAAEAHoscHlwYXJzaW5nX2NvbW1vbi48bGFtYmRhPi48bG9jYWxzPi48Z2VuZXhwcj5ydwIAACkBckgCAAApAXJ2AAAAcncAAABydwAAAHJ4AAAAcnkAAACiFQAAcwAAAAB6Bzo6ZmZmZjp6Em1peGVkIElQdjYgYWRkcmVzc3oMSVB2NiBhZGRyZXNzejpbMC05YS1mQS1GXXsyfShbOi4tXSlbMC05YS1mQS1GXXsyfSg/OlwxWzAtOWEtZkEtRl17Mn0pezR9egtNQUMgYWRkcmVzc/oIJVktJW0tJWRjAQAAAAAAAAACAAAAAwAAAAMAAABzEAAAAIcAZgFkAWQChAh9AXwBUwApA2HYAQAACiAgICAgICAgSGVscGVyIHRvIGNyZWF0ZSBhIHBhcnNlIGFjdGlvbiBmb3IgY29udmVydGluZyBwYXJzZWQgZGF0ZSBzdHJpbmcgdG8gUHl0aG9uIGRhdGV0aW1lLmRhdGUKCiAgICAgICAgUGFyYW1zIC0KICAgICAgICAgLSBmbXQgLSBmb3JtYXQgdG8gYmUgcGFzc2VkIHRvIGRhdGV0aW1lLnN0cnB0aW1lIChkZWZhdWx0PUN7IiVZLSVtLSVkIn0pCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBkYXRlX2V4cHIgPSBweXBhcnNpbmdfY29tbW9uLmlzbzg2MDFfZGF0ZS5jb3B5KCkKICAgICAgICAgICAgZGF0ZV9leHByLnNldFBhcnNlQWN0aW9uKHB5cGFyc2luZ19jb21tb24uY29udmVydFRvRGF0ZSgpKQogICAgICAgICAgICBwcmludChkYXRlX2V4cHIucGFyc2VTdHJpbmcoIjE5OTktMTItMzEiKSkKICAgICAgICBwcmludHM6OgogICAgICAgICAgICBbZGF0ZXRpbWUuZGF0ZSgxOTk5LCAxMiwgMzEpXQogICAgICAgIGMDAAAAAAAAAAQAAAARAAAAEwAAAHNMAAAAeRR0AGoBfAJkARkAiACDAmoCgwBTAAQAdANrCnJGAQB9AwEAehZ0BHwAfAF0BXwDgwGDA4IBVwBZAGQAZAB9A34DWABuAlgAZABTACkCTnIBAAAAKQZyAwAAANoIc3RycHRpbWVaBGRhdGVyugEAAHIfAAAAcnsAAAApBHKKAAAAcjUBAABydgAAANoCdmUpAdoDZm10cncAAAByeAAAANoGY3Z0X2ZuuRUAAHMIAAAAAAECARQBEAF6LnB5cGFyc2luZ19jb21tb24uY29udmVydFRvRGF0ZS48bG9jYWxzPi5jdnRfZm5ydwAAACkCcqYCAABypwIAAHJ3AAAAKQFypgIAAHJ4AAAA2g1jb252ZXJ0VG9EYXRlqhUAAHMEAAAAAA8MBXoecHlwYXJzaW5nX2NvbW1vbi5jb252ZXJ0VG9EYXRl+hQlWS0lbS0lZFQlSDolTTolUy4lZmMBAAAAAAAAAAIAAAADAAAAAwAAAHMQAAAAhwBmAWQBZAKECH0BfAFTACkDYRMCAAAKICAgICAgICBIZWxwZXIgdG8gY3JlYXRlIGEgcGFyc2UgYWN0aW9uIGZvciBjb252ZXJ0aW5nIHBhcnNlZCBkYXRldGltZSBzdHJpbmcgdG8gUHl0aG9uIGRhdGV0aW1lLmRhdGV0aW1lCgogICAgICAgIFBhcmFtcyAtCiAgICAgICAgIC0gZm10IC0gZm9ybWF0IHRvIGJlIHBhc3NlZCB0byBkYXRldGltZS5zdHJwdGltZSAoZGVmYXVsdD1DeyIlWS0lbS0lZFQlSDolTTolUy4lZiJ9KQoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgZHRfZXhwciA9IHB5cGFyc2luZ19jb21tb24uaXNvODYwMV9kYXRldGltZS5jb3B5KCkKICAgICAgICAgICAgZHRfZXhwci5zZXRQYXJzZUFjdGlvbihweXBhcnNpbmdfY29tbW9uLmNvbnZlcnRUb0RhdGV0aW1lKCkpCiAgICAgICAgICAgIHByaW50KGR0X2V4cHIucGFyc2VTdHJpbmcoIjE5OTktMTItMzFUMjM6NTk6NTkuOTk5IikpCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgW2RhdGV0aW1lLmRhdGV0aW1lKDE5OTksIDEyLCAzMSwgMjMsIDU5LCA1OSwgOTk5MDAwKV0KICAgICAgICBjAwAAAAAAAAAEAAAAEQAAABMAAABzSAAAAHkQdABqAXwCZAEZAIgAgwJTAAQAdAJrCnJCAQB9AwEAehZ0A3wAfAF0BHwDgwGDA4IBVwBZAGQAZAB9A34DWABuAlgAZABTACkCTnIBAAAAKQVyAwAAAHKkAgAAcroBAAByHwAAAHJ7AAAAKQRyigAAAHI1AQAAcnYAAABypQIAACkBcqYCAABydwAAAHJ4AAAAcqcCAADPFQAAcwgAAAAAAQIBEAEQAXoycHlwYXJzaW5nX2NvbW1vbi5jb252ZXJ0VG9EYXRldGltZS48bG9jYWxzPi5jdnRfZm5ydwAAACkCcqYCAABypwIAAHJ3AAAAKQFypgIAAHJ4AAAA2hFjb252ZXJ0VG9EYXRldGltZcAVAABzBAAAAAAPDAV6InB5cGFyc2luZ19jb21tb24uY29udmVydFRvRGF0ZXRpbWV6Nyg/UDx5ZWFyPlxkezR9KSg/Oi0oP1A8bW9udGg+XGRcZCkoPzotKD9QPGRheT5cZFxkKSk/KT96DElTTzg2MDEgZGF0ZXqGKD9QPHllYXI+XGR7NH0pLSg/UDxtb250aD5cZFxkKS0oP1A8ZGF5PlxkXGQpW1QgXSg/UDxob3VyPlxkXGQpOig/UDxtaW51dGU+XGRcZCkoOig/UDxzZWNvbmQ+XGRcZChcLlxkKik/KT8pPyg/UDx0ej5afFsrLV1cZFxkOj9cZFxkKT96EElTTzg2MDEgZGF0ZXRpbWV6MlswLTlhLWZBLUZdezh9KC1bMC05YS1mQS1GXXs0fSl7M30tWzAtOWEtZkEtRl17MTJ92gRVVUlEYwMAAAAAAAAAAwAAAAMAAABDAAAAcxAAAAB0AGoBagJ8AmQBGQCDAVMAKQJhBwIAAAogICAgICAgIFBhcnNlIGFjdGlvbiB0byByZW1vdmUgSFRNTCB0YWdzIGZyb20gd2ViIHBhZ2UgSFRNTCBzb3VyY2UKCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgICMgc3RyaXAgSFRNTCBsaW5rcyBmcm9tIG5vcm1hbCB0ZXh0IAogICAgICAgICAgICB0ZXh0ID0gJzx0ZD5Nb3JlIGluZm8gYXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9weXBhcnNpbmcud2lraXNwYWNlcy5jb20iPnB5cGFyc2luZzwvYT4gd2lraSBwYWdlPC90ZD4nCiAgICAgICAgICAgIHRkLHRkX2VuZCA9IG1ha2VIVE1MVGFncygiVEQiKQogICAgICAgICAgICB0YWJsZV90ZXh0ID0gdGQgKyBTa2lwVG8odGRfZW5kKS5zZXRQYXJzZUFjdGlvbihweXBhcnNpbmdfY29tbW9uLnN0cmlwSFRNTFRhZ3MpKCJib2R5IikgKyB0ZF9lbmQKICAgICAgICAgICAgCiAgICAgICAgICAgIHByaW50KHRhYmxlX3RleHQucGFyc2VTdHJpbmcodGV4dCkuYm9keSkgIyAtPiAnTW9yZSBpbmZvIGF0IHRoZSBweXBhcnNpbmcgd2lraSBwYWdlJwogICAgICAgIHIBAAAAKQNybgAAANoOX2h0bWxfc3RyaXBwZXJygQAAACkDcooAAAByNQEAAHKIAQAAcncAAABydwAAAHJ4AAAA2g1zdHJpcEhUTUxUYWdz4BUAAHMCAAAAAA16HnB5cGFyc2luZ19jb21tb24uc3RyaXBIVE1MVGFnc3JhAgAAKQFy/gEAAHoCIAlymwIAAHKWAAAAKQFy9AAAAHoUY29tbWEgc2VwYXJhdGVkIGxpc3RjAQAAAAAAAAABAAAAAgAAAEMAAABzDAAAAHQAfACDAWoBgwBTACkBTikCcoQAAABy8AEAACkBcnYAAABydwAAAHJ3AAAAcngAAAByeQAAAPQVAABzAAAAAGMBAAAAAAAAAAEAAAACAAAAQwAAAHMMAAAAdAB8AIMBagGDAFMAKQFOKQJyhAAAAHKAAgAAKQFydgAAAHJ3AAAAcncAAAByeAAAAHJ5AAAA9xUAAHMAAAAATikCcgEAAAByQgEAACkCcgEAAAByQgEAACkBcqMCAAApAXKpAgAAKT9ykQAAAHKSAAAAcpMAAABysAAAAHJtAAAAcnUAAABaEGNvbnZlcnRUb0ludGVnZXLaBWZsb2F0Wg5jb252ZXJ0VG9GbG9hdHIvAAAAclIAAAByaQEAAHKAAAAAcpwCAAByRAAAAHKgAgAAcicAAABaDnNpZ25lZF9pbnRlZ2Vycp0CAAByeAEAAHIbAAAAcsUBAABaDW1peGVkX2ludGVnZXJySAIAANoEcmVhbFoIc2NpX3JlYWxypAEAANoGbnVtYmVycp4CAAByNAAAAHIzAAAAcp8CAABaDGlwdjRfYWRkcmVzc3KiAgAAWhJfZnVsbF9pcHY2X2FkZHJlc3NaE19zaG9ydF9pcHY2X2FkZHJlc3NyfgEAAFoTX21peGVkX2lwdjZfYWRkcmVzc3IKAAAAWgxpcHY2X2FkZHJlc3NaC21hY19hZGRyZXNzcuYBAAByqAIAAHKqAgAAWgxpc284NjAxX2RhdGVaEGlzbzg2MDFfZGF0ZXRpbWXaBHV1aWRyNwAAAHI2AAAAcqwCAAByrQIAAHIZAAAAchUAAAByEwAAAHJWAAAAci4AAADaDV9jb21tYXNlcGl0ZW1yQAAAAHJZAAAAcswAAABaFGNvbW1hX3NlcGFyYXRlZF9saXN0cmQAAAByQgAAAHJ3AAAAcncAAABydwAAAHJ4AAAAcm4AAADpFAAAc04AAAAIfwAHBAIIBQgFFAMaAxQDIgIOAiICCgIUAxQEEAMUAxgDDgMOARYBMgEOAQ4BHAMOAwIBDBUCAQwVDgMOAw4DEAEMDwQBOAEeAxADEAHaCF9fbWFpbl9fWgZzZWxlY3TaBGZyb216Al8kcl0CAAApAXJiAgAA2gdjb2x1bW5zcmoBAABaBnRhYmxlc1oHY29tbWFuZGFLAgAACiAgICAgICAgIyAnKicgYXMgY29sdW1uIGxpc3QgYW5kIGRvdHRlZCB0YWJsZSBuYW1lCiAgICAgICAgc2VsZWN0ICogZnJvbSBTWVMuWFlaWlkKCiAgICAgICAgIyBjYXNlbGVzcyBtYXRjaCBvbiAiU0VMRUNUIiwgYW5kIGNhc3RzIGJhY2sgdG8gInNlbGVjdCIKICAgICAgICBTRUxFQ1QgKiBmcm9tIFhZWlpZLCBBQkMKCiAgICAgICAgIyBsaXN0IG9mIGNvbHVtbiBuYW1lcywgYW5kIG1peGVkIGNhc2UgU0VMRUNUIGtleXdvcmQKICAgICAgICBTZWxlY3QgQUEsQkIsQ0MgZnJvbSBTeXMuZHVhbAoKICAgICAgICAjIG11bHRpcGxlIHRhYmxlcwogICAgICAgIFNlbGVjdCBBLCBCLCBDIGZyb20gU3lzLmR1YWwsIFRhYmxlMgoKICAgICAgICAjIGludmFsaWQgU0VMRUNUIGtleXdvcmQgLSBzaG91bGQgZmFpbAogICAgICAgIFhlbGVjdCBBLCBCLCBDIGZyb20gU3lzLmR1YWwKCiAgICAgICAgIyBpbmNvbXBsZXRlIGNvbW1hbmQgLSBzaG91bGQgZmFpbAogICAgICAgIFNlbGVjdAoKICAgICAgICAjIGludmFsaWQgY29sdW1uIG5hbWUgLSBzaG91bGQgZmFpbAogICAgICAgIFNlbGVjdCBeXl4gZnJveCBTeXMuZHVhbAoKICAgICAgICB6XQogICAgICAgIDEwMAogICAgICAgIC0xMDAKICAgICAgICArMTAwCiAgICAgICAgMy4xNDE1OQogICAgICAgIDYuMDJlMjMKICAgICAgICAxZS0xMgogICAgICAgIHogCiAgICAgICAgMTAwCiAgICAgICAgRkYKICAgICAgICB6NgogICAgICAgIDEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OAogICAgICAgICkBcnEAAAApAnJhAgAARikBTikCRlQpAVQpAXKWAAAAKQFUKeJysAAAANoLX192ZXJzaW9uX19aD19fdmVyc2lvblRpbWVfX9oKX19hdXRob3JfX3KXAAAA2gd3ZWFrcmVmcgIAAABy1AAAAHLMAAAAcn4AAABysQEAAHJkAQAAchQCAABymQEAAHIiAQAAcjwBAABykAEAAHIDAAAA2gdfdGhyZWFkcgQAAADaC0ltcG9ydEVycm9yWgl0aHJlYWRpbmdyBQAAAHKVAQAAWgtvcmRlcmVkZGljdNoHX19hbGxfX3K5AQAA2gx2ZXJzaW9uX2luZm9yOwEAAHIQAQAA2gdtYXhzaXplcucBAAByewAAAHLLAAAA2gNjaHJydQIAAHKEAAAAckgCAABy2AAAAHIcAQAA2ghyZXZlcnNlZHLGAAAAco8BAAByHgEAAHI2AgAAcgsCAAByDAIAAHJJAQAAWgZtYXhpbnRaBnhyYW5nZXLZAAAAWgtfX2J1aWx0aW5fX3KLAAAAWgVmbmFtZXL7AAAAckoBAABypQAAAHKuAAAAcsgAAAByjwAAAHK6AAAAcpAAAABaD2FzY2lpX3VwcGVyY2FzZVoPYXNjaWlfbG93ZXJjYXNlcjQAAAByUgAAAHJEAAAAcjMAAAByawIAAHKqAAAAWglwcmludGFibGVyVgAAAHJLAQAAch0AAAByHwAAAHIhAAAAciMAAAByJgAAAHK0AAAAciIAAADaDk11dGFibGVNYXBwaW5n2ghyZWdpc3RlcnI5AAAAckoAAAByRwAAAHIvAQAAcjIBAAByNAEAAHJRAAAAck0BAAByJAAAAHIsAAAAcg0AAAByFwAAAHIVAAAAcoUCAAByUQEAAHISAAAAcggAAAByBwAAAHJsAAAAci8AAAByJwAAAHIlAAAAcgkAAAByLgAAAHIwAgAAchAAAAByFAAAAHITAAAAcioAAAByKQAAAHIxAAAAcjAAAAByIAAAAHIGAAAAchwAAAByFgAAAHIMAAAAch4AAAByDgAAAHIYAAAAckoCAAByGQAAAHIyAAAAck0CAAByTgIAAHIbAAAAcigAAAByDwAAAHJWAgAAci0AAAByCgAAAHIRAAAAcgsAAAByKwAAAHIaAAAAcmIAAAByQAAAAHI8AAAAcq0BAAByTwAAAHJOAAAAcgcCAAByUwAAAHJBAAAAcmcAAAByaAAAAHJqAAAAcmkBAAByQwAAAHJJAAAAckgAAAByYQAAAHJgAAAAcoAAAABaDF9lc2NhcGVkUHVuY1oPX2VzY2FwZWRIZXhDaGFyWg9fZXNjYXBlZE9jdENoYXLaB1VOSUNPREVaC19zaW5nbGVDaGFyWgpfY2hhclJhbmdlcm0BAAByfQIAAHJfAAAAck0AAAByXAAAAHJaAAAAcm0AAAByZAAAAHJCAAAAcogCAABySwAAAHJMAAAAcmUAAAByiQIAAHJrAAAAclQAAAByjgIAAHKPAgAAcmkAAAByVQAAAHI+AAAAcl4AAAByWQAAAHJjAAAAclAAAAByZgAAAHI1AAAAclcAAAByNwAAAHI2AAAAcskAAAByjAAAAHKaAgAAcu4AAAByOwAAAHJbAAAAcjgAAAByRQAAAHLGAQAAcl0AAAByPwAAAHI9AAAAckYAAAByWAAAAHKkAQAAcrICAAByOgAAAHJuAAAAcpEAAABaC3NlbGVjdFRva2VuWglmcm9tVG9rZW5aBWlkZW50Wgpjb2x1bW5OYW1lWg5jb2x1bW5OYW1lTGlzdFoKY29sdW1uU3BlY1oJdGFibGVOYW1lWg10YWJsZU5hbWVMaXN0WglzaW1wbGVTUUxy5QEAAHKwAgAAcp4CAAByoAIAAHKxAgAAcqsCAABydwAAAHJ3AAAAcncAAAByeAAAANoIPG1vZHVsZT49AAAAc+ABAAAEAgQBBAEEAggBDAEIAQgBCAEIAQgBCAEIAQgBCAEMAgIBEAEOARICAgEQAQ4BAgEQAQ4BEAUQARABDgEKAQoBDgEKAQ4BCgEMAQwBCgEOAQoBCgEKAQwBCgMSAQwBBgEGAQQBBAEEAxwDBgEEAggVBAEIAQ4BAgEUARABEAIWAggKEAMMAQQBCAEIAQgBFgIQOBAVEAUQExAIEAoQfwB/AH8AfwB/AAcMAggNCAwICggDCAMIAwgbDEAQfwB/AH8AfwB/AH8AfwB/AH8AZBAIEAsQDxAmBAEGAhBBEBcQEhA9EH8AIBBJEH8AChBHEDMQBxAaEB4QFBAPEBIQFBAXEHAQTBBPEEQQfBBNEBoQIBAmECMQHxAHBgEQQBBzEFEQBBAIECwQFRBBEBoQEAgsDBMMHwgJCBwIHAgIDEkIIwwlCAcIGQwBDAEMAQwBDAIYARIBEgEmARQBMAIIGAgKCA4IDggsDAMMAwgdCBMICQg/CAIMIwYBCAEIAhZrBAMWARYBDAEYAR4CGFoOcgoBCgIgARYBKAEKBRwDEgMWARIDIAMEAxIDEAECATABIAUQfwB/ABQMAgoBCgIQAhgBFAEKAhgBFAIiAwQWCAIGBwgDBgcIAgYDCAIIARIBBgI=
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 6
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
pyparsing.cpython-36.opt-1.pyc
196.32 KB
lrw-r--r--
2025-07-15 09:13:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-36.pyc
196.32 KB
lrw-r--r--
2025-07-15 09:13:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-36.opt-1.pyc
23.84 KB
lrw-r--r--
2025-07-15 09:13:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-36.pyc
23.84 KB
lrw-r--r--
2025-07-15 09:13:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-36.opt-1.pyc
113 B
lrw-r--r--
2025-07-15 09:13:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-36.pyc
113 B
lrw-r--r--
2025-07-15 09:13:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).