Mw0NCgdae2PrgQMA4wAAAAAAAAAAAAAAAH8AAABAAAAAc5oLAABkAFoAZAFaAWQCWgJkA1oDZARkBWwEWgRkBGQGbAVtBloHAQBkBGQFbAhaCGQEZAVsCVoJZARkBWwKWgpkBGQFbAtaC2QEZAVsDFoMZARkBWwNWg1kBGQFbA5aDmQEZAVsD1oPZARkBWwQWhBkBGQHbBFtEVoRAQB5EGQEZAhsEm0TWhMBAFcAbiAEAGUUawpyqAEAAQABAGQEZAhsFW0TWhMBAFkAbgJYAHkQZARkCWwNbRZaFwEAVwBuPgQAZRRrCnL4AQABAAEAeRBkBGQJbBhtFloXAQBXAG4YBABlFGsKcvIBAAEAAQBkBVoXWQBuAlgAWQBuAlgAZApkC2QMZA1kDmQPZBBkEWQSZBNkFGQVZBZkF2QYZBlkGmQbZBxkHWQeZB9kIGQhZCJkI2QkZCVkJmQnZChkKWQqZCtkLGQtZC5kL2QwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZDpkO2Q8ZD1kPmQ/ZEBkQWRCZENkRGRFZEZkR2RIZElkSmRLZExkTWROZE9kUGRRZFJkU2RUZFVkVmRXZFhkWWRaZFtkXGRdZF5kX2RgZGFkYmRjZGRkZWRmZGdkaGRpZGpka2RsZG1kbmRvZHBkcWRyZ2laGWUaZQlqG4MBZAVkc4UCGQBaHGUcZAQZAGRzawJaHWUdkAJyImUJah5aH2UgWiFlIlojZSBaJGUlZSZlJ2UoZSllGmUqZStlLGUtZS5nC1ovbmJlCWowWh9lMVoyZHRkdYQAWiRnAFovZARkBWwzWjN4QmR2ajSDAEQAXTZaNXkUZS9qNmU3ZTNlNYMCgwEBAFcAbhoEAGU4awqQAnJ8AQABAAEAkAJ3SlkAbgJYAJACcUpXAGU5ZHdkeIQAZTJkeYMBRACDAYMBWjpkemR7hABaO0cAZHxkfYQAZH1lPIMDWj1lBGo+ZQRqPxcAWkBkflpBZUFkfxcAWkJlQGVBFwBaQ2UiZICDAVpEZIFqRWSCZHiEAGUEakZEAIMBgwFaR0cAZINkIYQAZCFlSIMDWklHAGSEZCOEAGQjZUmDA1pKRwBkhWQlhABkJWVJgwNaS0cAZIZkJ4QAZCdlS4MDWkxHAGSHZCqEAGQqZUiDA1pNRwBkiGSJhABkiWU8gwNaTkcAZIpkJoQAZCZlPIMDWk9lDWpQalFlT4MBAQBki2Q9hABaUmSMZE6EAFpTZI1kS4QAWlRkjmSPhABaVWSQZJGEAFpWZJJkk4QAWldklGRVhABaWJABZC9klmSXhAFaWUcAZJhkKIQAZChlPIMDWlpHAGSZZDCEAGQwZVqDA1pbRwBkmmQRhABkEWVbgwNaXEcAZJtkG4QAZBtlW4MDWl1HAGScZBmEAGQZZVuDA1peZV5aX2VeZVpfYEcAZJ1kFoQAZBZlW4MDWmFHAGSeZAyEAGQMZV6DA1piRwBkn2QLhABkC2VhgwNaY0cAZKBkcIQAZHBlW4MDWmRHAGShZDOEAGQzZVuDA1plRwBkomQrhABkK2VbgwNaZkcAZKNkKYQAZCllW4MDWmdHAGSkZA2EAGQNZVuDA1poRwBkpWQyhABkMmVbgwNaaUcAZKZkp4QAZKdlW4MDWmpHAGSoZBSEAGQUZWqDA1prRwBkqWQYhABkGGVqgwNabEcAZKpkF4QAZBdlaoMDWm1HAGSrZC6EAGQuZWqDA1puRwBkrGQthABkLWVqgwNab0cAZK1kNYQAZDVlaoMDWnBHAGSuZDSEAGQ0ZWqDA1pxRwBkr2QkhABkJGVagwNackcAZLBkCoQAZAplcoMDWnNHAGSxZCCEAGQgZXKDA1p0RwBksmQahABkGmVygwNadUcAZLNkEIQAZBBlcoMDWnZHAGS0ZCKEAGQiZVqDA1p3RwBktWQShABkEmV3gwNaeEcAZLZkHIQAZBxld4MDWnlHAGS3ZLiEAGS4ZXeDA1p6RwBkuWQdhABkHWV6gwNae0cAZLpkNoQAZDZleoMDWnxHAGS7ZLyEAGS8ZTyDA1p9ZX2DAFp+RwBkvWQfhABkH2V3gwNaf0cAZL5kLIQAZCxld4MDWoBHAGS/ZBOEAGQTZXeDA1qBRwBkwGTBhABkwWWBgwNagkcAZMJkMYQAZDFld4MDWoNHAGTDZA6EAGQOZYODA1qERwBkxGQVhABkFWWDgwNahUcAZMVkD4QAZA9lg4MDWoZHAGTGZC+EAGQvZYODA1qHRwBkx2QehABkHmU8gwNaiGTIZGaEAFqJkAFkMGTLZESEAVqKkAFkMWTMZECEAVqLZM1kzoQAWoxkz2RThABajWTQZFKEAFqOZNFk0oQAWo+QAWQyZNRkV4QBWpBk1WRFhABakZABZDNk1mRrhAFakmTXZGyEAFqTZNhkboQAWpRlXIMAapVkR4MBWpZlbIMAapVkTYMBWpdlbYMAapVkTIMBWphlboMAapVkZYMBWpllb4MAapVkZIMBWpplZWVEZNlklWTajQNqm2TbZNyEAIMBWpxlZmTdgwFqm2TeZNyEAIMBWp1lZmTfgwFqm2TgZNyEAIMBWp5lnGWdQgBlnkIAZWVlR2ThZHlk4o0DQgBlZmTjZQtqn4MCQgBaoGWFZaBlh2TkgwEXAGWgFwCDAVqhZV5k5YMBZX9k5oMBaqJk54MBFwBlhWV7ZaFloEIAgwGDAWqiZOiDARcAZOkXAFqjZOpkY4QAWqRk62RRhABapWTsZGCEAFqmZO1kXoQAWqdk7mRxhABaqGWoZO9k3IQAgwFaqWWoZPBk3IQAgwFaqmTxZPKEAFqrZPNkT4QAWqxk9GRQhABarWT1ZGmEAFquZTyDAGWuX6+QAWQ0ZPZkb4QBWrBlPYMAWrFlPIMAZbFfsmU8gwBlsV+zZYdk94MBZYdk+IMBZgJk+WRthAFatGW0WrVlhGVmZPqDAWT7FwCDAWqVZPyDAVq2ZYRlZmT9gwFk/hcAgwFqlWT/gwFat2WEZWZk+oMBZPsXAGVmZP2DAWT+FwBCAIMBapWQAWQAgwFauGWEZV+QAWQBgwFluGoIgwAXAIMBapWQAWQCgwFauWT3ZPhkBWW4agiDAGYEkAFkA2RUhAFaupABZDWQAWQEZGqEAVq7ZaSQAWQFgwFavGWkkAFkBoMBWr1lrGVlZUBlQ5ABZAcXAIMCapWQAWQIgwGDAVwCWr5av2XAZcGQAWQJajSDAJABZAqDAoMBWsJlZpABZAuQAWQMakVlwmrDgwCDARcAkAFkDRcAgwFqlZABZA6DAVrEkAFkD2RfhABaxWWEZWaQAWQQgwGQAWQRFwCDAWqVkAFkEoMBWsZlZpABZBODAWqVkAFkFIMBWsdlZpABZBWDAWrIgwBqlZABZBaDAVrJZWaQAWQXgwFqlZABZBiDAVrKZYRlZpABZBCDAZABZBEXAGXKQgCDAWqVkAFkGYMBWstly1rMZWaQAWQagwFqlZABZBuDAVrNZYRle2VlZUdkyZABZByNAmV/ZWWQAWQdgwFlXmTJgwEPABcAZW2DAA8AFwCDARcAgwGDAWrOgwBqlZABZB6DAVrPZYplf2W4agiDAGXPQgBkgZABZB+NAoMBapVkPoMBWtBHAJABZCBkcoQAZHKDAlrRZdKQAWQhawKQC3KWZWKQAWQigwFa02VikAFkI4MBWtRlZWVAZUOQAWQkFwCDAlrVZYpl1ZABZCVk05ABZCaNA2qbZamDAVrWZYVlimXWgwGDAWqVkAFkJ4MBWteQAWQoZddCAFrYZYpl1ZABZCVk05ABZCaNA2qbZamDAVrZZYVlimXZgwGDAWqVkAFkKYMBWtpl05ABZCqDAWXYkAFkJ4MBFwBl1BcAZdqQAWQpgwEXAFrbZdtq3JABZCuDAQEAZdFq3WrckAFkLIMBAQBl0WreatyQAWQsgwEBAGXRat9q3JABZC2DAQEAZARkBWzgWuBl0WrgaptlqGXgauGDAYMBAQBl0WrgatyQAWQugwEBAGQFUwAoNgEAAGFTBgAACnB5cGFyc2luZyBtb2R1bGUgLSBDbGFzc2VzIGFuZCBtZXRob2RzIHRvIGRlZmluZSBhbmQgZXhlY3V0ZSBwYXJzaW5nIGdyYW1tYXJzCgpUaGUgcHlwYXJzaW5nIG1vZHVsZSBpcyBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBjcmVhdGluZyBhbmQgZXhlY3V0aW5nIHNpbXBsZSBncmFtbWFycywKdnMuIHRoZSB0cmFkaXRpb25hbCBsZXgveWFjYyBhcHByb2FjaCwgb3IgdGhlIHVzZSBvZiByZWd1bGFyIGV4cHJlc3Npb25zLiAgV2l0aCBweXBhcnNpbmcsIHlvdQpkb24ndCBuZWVkIHRvIGxlYXJuIGEgbmV3IHN5bnRheCBmb3IgZGVmaW5pbmcgZ3JhbW1hcnMgb3IgbWF0Y2hpbmcgZXhwcmVzc2lvbnMgLSB0aGUgcGFyc2luZyBtb2R1bGUKcHJvdmlkZXMgYSBsaWJyYXJ5IG9mIGNsYXNzZXMgdGhhdCB5b3UgdXNlIHRvIGNvbnN0cnVjdCB0aGUgZ3JhbW1hciBkaXJlY3RseSBpbiBQeXRob24uCgpIZXJlIGlzIGEgcHJvZ3JhbSB0byBwYXJzZSAiSGVsbG8sIFdvcmxkISIgKG9yIGFueSBncmVldGluZyBvZiB0aGUgZm9ybSAKQ3siPHNhbHV0YXRpb24+LCA8YWRkcmVzc2VlPiEifSksIGJ1aWx0IHVwIHVzaW5nIEx7V29yZH0sIEx7TGl0ZXJhbH0sIGFuZCBMe0FuZH0gZWxlbWVudHMgCihMeycrJzxQYXJzZXJFbGVtZW50Ll9fYWRkX18+fSBvcGVyYXRvciBnaXZlcyBMe0FuZH0gZXhwcmVzc2lvbnMsIHN0cmluZ3MgYXJlIGF1dG8tY29udmVydGVkIHRvCkx7TGl0ZXJhbH0gZXhwcmVzc2lvbnMpOjoKCiAgICBmcm9tIHB5cGFyc2luZyBpbXBvcnQgV29yZCwgYWxwaGFzCgogICAgIyBkZWZpbmUgZ3JhbW1hciBvZiBhIGdyZWV0aW5nCiAgICBncmVldCA9IFdvcmQoYWxwaGFzKSArICIsIiArIFdvcmQoYWxwaGFzKSArICIhIgoKICAgIGhlbGxvID0gIkhlbGxvLCBXb3JsZCEiCiAgICBwcmludCAoaGVsbG8sICItPiIsIGdyZWV0LnBhcnNlU3RyaW5nKGhlbGxvKSkKClRoZSBwcm9ncmFtIG91dHB1dHMgdGhlIGZvbGxvd2luZzo6CgogICAgSGVsbG8sIFdvcmxkISAtPiBbJ0hlbGxvJywgJywnLCAnV29ybGQnLCAnISddCgpUaGUgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBncmFtbWFyIGlzIHF1aXRlIHJlYWRhYmxlLCBvd2luZyB0byB0aGUgc2VsZi1leHBsYW5hdG9yeQpjbGFzcyBuYW1lcywgYW5kIHRoZSB1c2Ugb2YgJysnLCAnfCcgYW5kICdeJyBvcGVyYXRvcnMuCgpUaGUgTHtQYXJzZVJlc3VsdHN9IG9iamVjdCByZXR1cm5lZCBmcm9tIEx7UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZzxQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPn0gY2FuIGJlIGFjY2Vzc2VkIGFzIGEgbmVzdGVkIGxpc3QsIGEgZGljdGlvbmFyeSwgb3IgYW4Kb2JqZWN0IHdpdGggbmFtZWQgYXR0cmlidXRlcy4KClRoZSBweXBhcnNpbmcgbW9kdWxlIGhhbmRsZXMgc29tZSBvZiB0aGUgcHJvYmxlbXMgdGhhdCBhcmUgdHlwaWNhbGx5IHZleGluZyB3aGVuIHdyaXRpbmcgdGV4dCBwYXJzZXJzOgogLSBleHRyYSBvciBtaXNzaW5nIHdoaXRlc3BhY2UgKHRoZSBhYm92ZSBwcm9ncmFtIHdpbGwgYWxzbyBoYW5kbGUgIkhlbGxvLFdvcmxkISIsICJIZWxsbyAgLCAgV29ybGQgICEiLCBldGMuKQogLSBxdW90ZWQgc3RyaW5ncwogLSBlbWJlZGRlZCBjb21tZW50cwp6BjIuMS4xMHoVMDcgT2N0IDIwMTYgMDE6MzEgVVRDeipQYXVsIE1jR3VpcmUgPHB0bWNnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD7pAAAAAE4pAdoDcmVmKQHaCGRhdGV0aW1lKQHaBVJMb2NrKQHaC09yZGVyZWREaWN02gNBbmTaD0Nhc2VsZXNzS2V5d29yZNoPQ2FzZWxlc3NMaXRlcmFs2gpDaGFyc05vdElu2gdDb21iaW5l2gREaWN02gRFYWNo2gVFbXB0edoKRm9sbG93ZWRCedoHRm9yd2FyZNoKR29Ub0NvbHVtbtoFR3JvdXDaB0tleXdvcmTaB0xpbmVFbmTaCUxpbmVTdGFydNoHTGl0ZXJhbNoKTWF0Y2hGaXJzdNoHTm9NYXRjaNoGTm90QW552glPbmVPck1vcmXaCE9ubHlPbmNl2ghPcHRpb25hbNoCT3LaElBhcnNlQmFzZUV4Y2VwdGlvbtoTUGFyc2VFbGVtZW50RW5oYW5jZdoOUGFyc2VFeGNlcHRpb27aD1BhcnNlRXhwcmVzc2lvbtoTUGFyc2VGYXRhbEV4Y2VwdGlvbtoMUGFyc2VSZXN1bHRz2hRQYXJzZVN5bnRheEV4Y2VwdGlvbtoNUGFyc2VyRWxlbWVudNoMUXVvdGVkU3RyaW5n2hlSZWN1cnNpdmVHcmFtbWFyRXhjZXB0aW9u2gVSZWdleNoGU2tpcFRv2glTdHJpbmdFbmTaC1N0cmluZ1N0YXJ02ghTdXBwcmVzc9oFVG9rZW7aDlRva2VuQ29udmVydGVy2gVXaGl0ZdoEV29yZNoHV29yZEVuZNoJV29yZFN0YXJ02gpaZXJvT3JNb3Jl2glhbHBoYW51bXPaBmFscGhhc9oKYWxwaGFzOGJpdNoLYW55Q2xvc2VUYWfaCmFueU9wZW5UYWfaDWNTdHlsZUNvbW1lbnTaA2NvbNoSY29tbWFTZXBhcmF0ZWRMaXN02hBjb21tb25IVE1MRW50aXR52gxjb3VudGVkQXJyYXnaD2NwcFN0eWxlQ29tbWVudNoPZGJsUXVvdGVkU3RyaW5n2g9kYmxTbGFzaENvbW1lbnTaDWRlbGltaXRlZExpc3TaBmRpY3RPZtoOZG93bmNhc2VUb2tlbnPaBWVtcHR52gdoZXhudW1z2gtodG1sQ29tbWVudNoQamF2YVN0eWxlQ29tbWVudNoEbGluZdoHbGluZUVuZNoJbGluZVN0YXJ02gZsaW5lbm/aDG1ha2VIVE1MVGFnc9oLbWFrZVhNTFRhZ3PaDm1hdGNoT25seUF0Q29s2hFtYXRjaFByZXZpb3VzRXhwctoUbWF0Y2hQcmV2aW91c0xpdGVyYWzaCm5lc3RlZEV4cHLaD251bGxEZWJ1Z0FjdGlvbtoEbnVtc9oFb25lT2baB29wQXNzb2PaEm9wZXJhdG9yUHJlY2VkZW5jZdoKcHJpbnRhYmxlc9oIcHVuYzhiaXTaEnB5dGhvblN0eWxlQ29tbWVudNoMcXVvdGVkU3RyaW5n2gxyZW1vdmVRdW90ZXPaEXJlcGxhY2VIVE1MRW50aXR52gtyZXBsYWNlV2l0aNoKcmVzdE9mTGluZdoPc2dsUXVvdGVkU3RyaW5n2gZzcmFuZ2XaCXN0cmluZ0VuZNoLc3RyaW5nU3RhcnTaEHRyYWNlUGFyc2VBY3Rpb27aDXVuaWNvZGVTdHJpbmfaDHVwY2FzZVRva2Vuc9oNd2l0aEF0dHJpYnV0ZdoNaW5kZW50ZWRCbG9ja9oPb3JpZ2luYWxUZXh0Rm9y2gd1bmdyb3Vw2g1pbmZpeE5vdGF0aW9u2gtsb2NhdGVkRXhwctoJd2l0aENsYXNz2gpDbG9zZU1hdGNo2gh0b2tlbk1hcNoQcHlwYXJzaW5nX2NvbW1vbukDAAAAYwEAAAAAAAAAAwAAAAsAAABDAAAAc2AAAAB0AHwAdAGDAnIOfABTAHkIdAJ8AIMBUwAEAHQDawpyWgEAAQABAHQBfACDAWoEdAVqBoMAZAGDAn0BdAdkAoMBfQJ8AmoIZANkBIQAgwEBAHwCagl8AYMBUwBYAGQFUwApBmEVAQAARHJvcC1pbiByZXBsYWNlbWVudCBmb3Igc3RyKG9iaikgdGhhdCB0cmllcyB0byBiZSBVbmljb2RlIGZyaWVuZGx5LiBJdCBmaXJzdCB0cmll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AAgBCAIIAggCcr4AAABjAAAAAAAAAAAAAAAABQAAAEAAAABznAEAAGUAWgFkAFoCZAFaA2RbZARkBYQBWgRkAmQCZANkA2UFZgVkBmQHhAFaBmQIZAmEAFoHZQVmAWQKZAuEAVoIZAxkDYQAWglkDmQPhABaCmQQZBGEAFoLZBJkE4QAWgxlDFoNZBRkFYQAWg5kFmQXhABaD2QYZBmEAFoQZBpkG4QAWhFkHGQdhABaEmUTcpxlEFoUZRFaFWUSWhZuJGUQWhdlEVoYZRJaGWQeZB+EAFoUZCBkIYQAWhVkImQjhABaFmQkZCWEAFoaZCZkJ4QAWhtkXGQoZCmEAVocZCpkK4QAWh1kLGQthABaHmQuZC+EAFofZDBkMYQAWiBkMmQzhABaIWQ0ZDWEAFoiZDZkN4QAWiNkOGQ5hABaJGQ6ZDuEAFolZDxkPYQAWiZkXWQ/ZECEAVonZEFkQoQAWihkQ2REhABaKWRFZEaEAFoqZF5kSGRJhAFaK2RKZEuEAFosZExkTYQAWi1kX2RPZFCEAVouZFFkUoQAWi9kU2RUhABaMGRVZFaEAFoxZFdkWIQAWjJkWWRahABaM2QCUwApYHIiAAAAYUkFAAAKICAgIFN0cnVjdHVyZWQgcGFyc2UgcmVzdWx0cywgdG8gcHJvdmlkZSBtdWx0aXBsZSBtZWFucyBvZiBhY2Nlc3MgdG8gdGhlIHBhcnNlZCBkYXRhOgogICAgICAgLSBhcyBhIGxpc3QgKEN7bGVuKHJlc3VsdHMpfSkKICAgICAgIC0gYnkgbGlzdCBpbmRleCAoQ3tyZXN1bHRzWzBdLCByZXN1bHRzWzFdfSwgZXRjLikKICAgICAgIC0gYnkgYXR0cmlidXRlIChDe3Jlc3VsdHMuPHJlc3VsdHNOYW1lPn0gLSBzZWUgTHtQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lfSkKCiAgICBFeGFtcGxlOjoKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIGRhdGVfc3RyID0gKGludGVnZXIuc2V0UmVzdWx0c05hbWUoInllYXIiKSArICcvJyAKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJtb250aCIpICsgJy8nIAogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoImRheSIpKQogICAgICAgICMgZXF1aXZhbGVudCBmb3JtOgogICAgICAgICMgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKCiAgICAgICAgIyBwYXJzZVN0cmluZyByZXR1cm5zIGEgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikKCiAgICAgICAgZGVmIHRlc3QocywgZm49cmVwcik6CiAgICAgICAgICAgIHByaW50KCIlcyAtPiAlcyIgJSAocywgZm4oZXZhbChzKSkpKQogICAgICAgIHRlc3QoImxpc3QocmVzdWx0KSIpCiAgICAgICAgdGVzdCgicmVzdWx0WzBdIikKICAgICAgICB0ZXN0KCJyZXN1bHRbJ21vbnRoJ10iKQogICAgICAgIHRlc3QoInJlc3VsdC5kYXkiKQogICAgICAgIHRlc3QoIidtb250aCcgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCInbWludXRlcycgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCJyZXN1bHQuZHVtcCgpIiwgc3RyKQogICAgcHJpbnRzOjoKICAgICAgICBsaXN0KHJlc3VsdCkgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCiAgICAgICAgcmVzdWx0WzBdIC0+ICcxOTk5JwogICAgICAgIHJlc3VsdFsnbW9udGgnXSAtPiAnMTInCiAgICAgICAgcmVzdWx0LmRheSAtPiAnMzEnCiAgICAgICAgJ21vbnRoJyBpbiByZXN1bHQgLT4gVHJ1ZQogICAgICAgICdtaW51dGVzJyBpbiByZXN1bHQgLT4gRmFsc2UKICAgICAgICByZXN1bHQuZHVtcCgpIC0+IFsnMTk5OScsICcvJywgJzEyJywgJy8nLCAnMzEnXQogICAgICAgIC0gZGF5OiAzMQogICAgICAgIC0gbW9udGg6IDEyCiAgICAgICAg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ICAgcHJpbnQoT25lT3JNb3JlKFdvcmQobnVtcykpLmFkZFBhcnNlQWN0aW9uKHJlbW92ZV9maXJzdCkucGFyc2VTdHJpbmcoIjAgMTIzIDMyMSIpKSAjIC0+IFsnMTIzJywgJzMyMSddCgogICAgICAgICAgICBsYWJlbCA9IFdvcmQoYWxwaGFzKQogICAgICAgICAgICBwYXR0ID0gbGFiZWwoIkxBQkVMIikgKyBPbmVPck1vcmUoV29yZChudW1zKSkKICAgICAgICAgICAgcHJpbnQocGF0dC5wYXJzZVN0cmluZygiQUFCIDEyMyAzMjEiKS5kdW1wKCkpCgogICAgICAgICAgICAjIFVzZSBwb3AoKSBpbiBhIHBhcnNlIGFjdGlvbiB0byByZW1vdmUgbmFtZWQgcmVzdWx0IChub3RlIHRoYXQgY29ycmVzcG9uZGluZyB2YWx1ZSBpcyBub3QKICAgICAgICAgICAgIyByZW1vdmVkIGZyb20gbGlzdCBmb3JtIG9mIHJlc3VsdHMpCiAgICAgICAgICAgIGRlZiByZW1vdmVfTEFCRUwodG9rZW5zKToKICAgICAgICAgICAgICAgIHRva2Vucy5wb3AoIkxBQkVMIikKICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbnMKICAgICAgICAgICAgcGF0dC5hZGRQYXJzZUFjdGlvbihyZW1vdmVfTEFCRUwpCiAgICAgICAgICAgIHByaW50KHBhdHQucGFyc2VTdHJpbmcoIkFBQiAxMjMgMzIxIikuZHVtcCgpKQogICAgICAgIHByaW50czo6CiAgICAgICAgICAgIFsnQUFCJywgJzEyMycsICczMjEnXQogICAgICAgICAgICAtIExBQkVMOiBBQUIKCiAgICAgICAgICAgIFsnQUFCJywgJzEyMycsICczMjEnXQogICAgICAgIHJyAAAA2gdkZWZhdWx0cgEAAAB6LXBvcCgpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJyVzJ05ycwAAACkFcukAAABy2wAAAHJ6AAAAcnUAAABy5QAAACkIcqQAAAByowAAANoGa3dhcmdzcuIAAABy3QAAANoFaW5kZXhyhAAAANoMZGVmYXVsdHZhbHVlcncAAABydwAA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AAogICAgICAgIFJldHVybnMgdGhlIG5hbWVkIHBhcnNlIHJlc3VsdHMgYXMgYSBuZXN0ZWQgZGljdGlvbmFyeS4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCiAgICAgICAgICAgIAogICAgICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygnMTIvMzEvMTk5OScpCiAgICAgICAgICAgIHByaW50KHR5cGUocmVzdWx0KSwgcmVwcihyZXN1bHQpKSAjIC0+IDxjbGFzcyAncHlwYXJzaW5nLlBhcnNlUmVzdWx0cyc+IChbJzEyJywgJy8nLCAnMzEnLCAnLycsICcxOTk5J10sIHsnZGF5JzogWygnMTk5OScsIDQpXSwgJ3llYXInOiBbKCcxMicsIDApXSwgJ21vbnRoJzogWygnMzEnLCAyKV19KQogICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0X2RpY3QgPSByZXN1bHQuYXNEaWN0KCkKICAgICAgICAgICAgcHJpbnQodHlwZShyZXN1bHRfZGljdCksIHJlcHIocmVzdWx0X2RpY3QpKSAjIC0+IDxjbGFzcyAnZGljdCc+IHsnZGF5JzogJzE5OTknLCAneWVhcic6ICcxMicsICdtb250aCc6ICczMSd9CgogICAgICAgICAgICAjIGV2ZW4gdGhvdWdoIGEgUGFyc2VSZXN1bHRzIHN1cHBvcnRzIGRpY3QtbGlrZSBhY2Nlc3MsIHNvbWV0aW1lIHlvdSBqdXN0IG5lZWQgdG8gaGF2ZSBhIGRpY3QKICAgICAgICAgICAgaW1wb3J0IGpzb24KICAgICAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhyZXN1bHQpKSAjIC0+IEV4Y2VwdGlvbjogVHlwZUVycm9yOiAuLi4gaXMgbm90IEpTT04gc2VyaWFsaXphYmxlCiAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0LmFzRGlj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aW5nCiAgIGJlZm9yZSBzdGFydGluZyB0aGUgcGFyc2luZyBwcm9jZXNzLiAgU2VlIEx7SXtQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nfTxQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPn0gZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgb24gcGFyc2luZyBzdHJpbmdzIGNvbnRhaW5pbmcgQ3s8VEFCPn1zLCBhbmQgc3VnZ2VzdGVkIG1ldGhvZHMgdG8gbWFpbnRhaW4gYQogICBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHBhcnNlZCBzdHJpbmcsIHRoZSBwYXJzZSBsb2NhdGlvbiwgYW5kIGxpbmUgYW5kIGNvbHVtbgogICBwb3NpdGlvbnMgd2l0aGluIHRoZSBwYXJzZWQgc3RyaW5nLgogICByAQAAAHJyAAAAciYBAAApAnLlAAAA2gVyZmluZCkDcp8AAADaBHN0cmdyiwAAAHJ3AAAAcncAAAByeAAAAHI5AAAAsQMAAHMEAAAAAAoEAWMCAAAAAAAAAAIAAAAEAAAAQwAAAHMSAAAAfAFqAGQBZAJ8AIMDZAMXAFMAKQRhBwIAAFJldHVybnMgY3VycmVudCBsaW5lIG51bWJlciB3aXRoaW4gYSBzdHJpbmcsIGNvdW50aW5nIG5ld2xpbmVzIGFzIGxpbmUgc2VwYXJhdG9ycy4KICAgVGhlIGZpcnN0IGxpbmUgaXMgbnVtYmVyIDEuCgogICBOb3RlOiB0aGUgZGVmYXVsdCBwYXJzaW5nIGJlaGF2aW9yIGlzIHRvIGV4cGFuZCB0YWJzIGluIHRoZSBpbnB1dCBzdHJpbmcKICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgTHtJe1BhcnNlckVsZW1lbnQucGFyc2VTdHJpbmd9PFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmc+fSBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICBvbiBwYXJzaW5nIHN0cmluZ3MgY29udGFpbmluZyBDezxUQUI+fXMsIGFuZCBzdWdnZXN0ZWQgbWV0aG9kcyB0byBtYWludGFpbiBhCiAgIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgcGFyc2VkIHN0cmluZywg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AQAAclsBAAByaQEAAHJqAQAAcngAAADaC190cmltX2FyaXR5+AMAAHMqAAAAAAEIAQwBBgEGAxABCgUMBQYBBgUEAw4BFAIWGAQBAgEGARIBDgEOAQYCcnMBAABjAAAAAAAAAAAAAAAABQAAAAAAAABzkgIAAGUAWgFkAFoCZAFaA2QCWgRkA1oFZQZkBGQFhACDAVoHZQZkBmQHhACDAVoIZIZkCGQJhAFaCWQKZAuEAFoKZAxkDYQAWgtkh2QOZA+EAVoMZIhkEWQShAFaDWQTZBSEAFoOZBVkFoQAWg9kF2QYhABaEGQZZBqEAFoRZBtkHIQAWhJkHWQehABaE2SJZB9kIIQBWhRkIWQihABaFWSKZCNkJIQBWhZkJWQmhABaF2QnZCiEAFoYRwBkKWQqhABkKmUZgwNaGmUbZCtrCXLgRwBkLGQthABkLWUZgwNaHG4QRwBkLmQthABkLWUZgwNaHGkAWh1lHoMAWh9kL2QvZwJaIGSLZDBkMYQBWiFlFloiZQZkMmQzhACDAVojZANaJGUGZIxkNWQ2hAGDAVolZI1kN2Q4hAFaJmUnZANmAmQ5ZDqEAVooZDtkPIQAWillJ2YBZD1kPoQBWiplJ2QDZgJkP2RAhAFaK2RBZEKEAFosZENkRIQAWi1kRWRGhABaLmRHZEiEAFovZElkSoQAWjBkS2RMhABaMWRNZE6EAFoyZE9kUIQAWjNkUWRShABaNGRTZFSEAFo1ZFVkVoQAWjZkV2RYhABaN2RZZFqEAFo4ZI5kW2RchAFaOWRdZF6EAFo6ZF9kYIQAWjtkYWRihABaPGRjZGSEAFo9ZGVkZoQAWj5kZ2RohABaP2SPZGlkaoQBWkBka2RshABaQWRtZG6EAFpCZG9kcIQAWkNkcWRyhABaRGcAZgFkc2R0hAFaRWSQZHVkdoQBWkaHAGYBZHdkeIQIWkdkeWR6hABaSGR7ZHyEAFpJZH1kfoQAWkpkf2SAhABaS2SRZIFkgoQBWkxkkmSEZIWEAVpNhwAEAFpOUwApk3IkAAAAeilBYnN0cmFjdCBiYXNlIGxldmVsIHBhcnNlciBlbGVtZW50IGNsYXNzLnoEIAoJDUZjAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAHwAdABfAWQBUwApAmHRAQAACiAgICAgICAgT3ZlcnJpZGVzIHRoZSBk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YW1lIGZvciByZWZlcmVuY2luZyBtYXRjaGluZyB0b2tlbnMgYXMgYSBuZXN0ZWQgYXR0cmlidXRlCiAgICAgICAgb2YgdGhlIHJldHVybmVkIHBhcnNlIHJlc3VsdHMuCiAgICAgICAgTk9URTogdGhpcyByZXR1cm5zIGEgKmNvcHkqIG9mIHRoZSBvcmlnaW5hbCBDe1BhcnNlckVsZW1lbnR9IG9iamVjdDsKICAgICAgICB0aGlzIGlzIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gZGVmaW5lIGEgYmFzaWMgZWxlbWVudCwgc3VjaCBhcyBhbgogICAgICAgIGludGVnZXIsIGFuZCByZWZlcmVuY2UgaXQgaW4gbXVsdGlwbGUgcGxhY2VzIHdpdGggZGlmZmVyZW50IG5hbWVzLgoKICAgICAgICBZb3UgY2FuIGFsc28gc2V0IHJlc3VsdHMgbmFtZXMgdXNpbmcgdGhlIGFiYnJldmlhdGVkIHN5bnRheCwKICAgICAgICBDe2V4cHIoIm5hbWUiKX0gaW4gcGxhY2Ugb2YgQ3tleHByLnNldFJlc3VsdHNOYW1lKCJuYW1lIil9IC0gCiAgICAgICAgc2VlIEx7SXtfX2NhbGxfX308X19jYWxsX18+fS4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGRhdGVfc3RyID0gKGludGVnZXIuc2V0UmVzdWx0c05hbWUoInllYXIiKSArICcvJyAKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJtb250aCIpICsgJy8nIAogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoImRheSIpKQoKICAgICAgICAgICAgIyBlcXVpdmFsZW50IGZvcm06CiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCiAgICAgICAg2gEqTnJyAAAAVHJzAAAAKQRy2QAAANoIZW5kc3dpdGhyfAEAAHKIAQAAKQRypAAAAHLKAAAA2g5saXN0QWxsTWF0Y2hlc9oHbmV3c2VsZnJ3AAAAcncAAAByeAAAANoOc2V0UmVzdWx0c05hbWWdBAAAcw4AAAAAFAgBCgEMAQQBBgEIAXocUGFyc2VyRWxlbWVudC5zZXRSZXN1bHRzTmFtZVRjAgAAAAAAAAADAAAABAAAAAMAAABzQAAAAHwBciZ8AGoAiQBkBYcAZgFkAmQDhAl9AogAfAJfAXwCfABfAG4WdAJ8AGoAZASDAnI8fABqAGoBfABfAHwAUwApBnqmTWV0aG9kIHRvIGludm9rZSB0aGUgUHl0aG9uIHBkYiBkZWJ1Z2dlciB3aGVuIHRoaXMgZWxlbWVudCBpcwogICAgICAgICAgIGFib3V0IHRvIGJlIHBhcnNlZC4gU2V0IEN7YnJlYWtGbGFnfSB0byBUcnVlIHRvIGVuYWJsZSwgRmFsc2UgdG8KICAgICAgICAgICBkaXNhYmxlLgogICAgICAgIFRjBAAAAAAAAAAFAAAABQAAABMAAABzHgAAAGQBZABsAH0EfARqAYMAAQCIAHwAfAF8AnwDgwRTACkCTnIBAAAAKQLaA3BkYtoJc2V0X3RyYWNlKQVyTwEAAHKfAAAA2glkb0FjdGlvbnPaDGNhbGxQcmVQYXJzZXKWAQAAKQHaDF9wYXJzZU1ldGhvZHJ3AAAAcngAAADaB2JyZWFrZXLABAAAcwYAAAAAAQgBCAF6J1BhcnNlckVsZW1lbnQuc2V0QnJlYWsuPGxvY2Fscz4uYnJlYWtlctoUX29yaWdpbmFsUGFyc2VNZXRob2QpAlRUKQPaBl9wYXJzZXKcAQAAcvkAAAApA3KkAAAA2glicmVha0ZsYWdymwEAAHJ3AAAAKQFymgEAAHJ4AAAA2ghzZXRCcmVha7kEAABzEAAAAAAFBAEGAQ4EBgEIAgwBCgF6FlBhcnNlckVsZW1lbnQuc2V0QnJlYWtjAQAAAAAAAAADAAAABQAAAE8AAABzJgAAAHQAdAF0AnQAfAGDAYMCgwF8AF8DfAJqBGQBZAKDAnwAXwV8AFMAKQNhCwcAAAogICAgICAgIERlZmluZSBhY3Rpb24gdG8gcGVyZm9ybSB3aGVuIHN1Y2Nlc3NmdWxseSBtYXRjaGluZyBwYXJzZSBlbGVtZW50IGRlZmluaXRpb24uCiAgICAgICAgUGFyc2UgYWN0aW9uIGZuIGlzIGEgY2FsbGFibGUgbWV0aG9kIHdpdGggMC0zIGFyZ3VtZW50cywgY2FsbGVkIGFzIEN7Zm4ocyxsb2MsdG9rcyl9LAogICAgICAgIEN7Zm4obG9jLHRva3MpfSwgQ3tmbih0b2tzKX0sIG9yIGp1c3QgQ3tmbigpfSwgd2hlcmU6CiAgICAgICAgIC0gcyAgID0gdGhlIG9yaWdpbmFsIHN0cmluZyBiZWluZyBwYXJzZWQgKHNlZSBub3RlIGJlbG93KQogICAgICAgICAtIGxvYyA9IHRoZSBsb2NhdGlvbiBvZiB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nCiAgICAgICAgIC0gdG9rcyA9IGEgbGlzdCBvZiB0aGUgbWF0Y2hlZCB0b2tlbnMsIHBhY2thZ2VkIGFzIGEgQ3tMe1BhcnNlUmVzdWx0c319IG9iamVjdAogICAgICAgIElmIHRoZSBmdW5jdGlvbnMgaW4gZm5zIG1vZGlmeSB0aGUgdG9rZW5zLCB0aGV5IGNhbiByZXR1cm4gdGhlbSBhcyB0aGUgcmV0dXJuCiAgICAgICAgdmFsdWUgZnJvbSBmbiwgYW5kIHRoZSBtb2RpZmllZCBsaXN0IG9mIHRva2VucyB3aWxsIHJlcGxhY2UgdGhlIG9yaWdpbmFsLgogICAgICAgIE90aGVyd2lzZSwgZm4gZG9lcyBub3QgbmVlZCB0byByZXR1cm4gYW55IHZhbHVlLgoKICAgICAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50czoKICAgICAgICAgLSBjYWxsRHVyaW5nVHJ5ID0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGluZGljYXRlIGlmIHBhcnNlIGFjdGlvbiBzaG91bGQgYmUgcnVuIGR1cmluZyBsb29rYWhlYWRzIGFuZCBhbHRlcm5hdGUgdGVzdGluZwoKICAgICAgICBOb3RlOiB0aGUgZGVmYXVsdCBwYXJzaW5nIGJlaGF2aW9yIGlzIHRvIGV4cGFuZCB0YWJzIGluIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICBiZWZvcmUgc3RhcnRpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIFNlZSBMe0l7cGFyc2VTdHJpbmd9PHBhcnNlU3RyaW5nPn0gZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgICAgICBvbiBwYXJzaW5nIHN0cmluZ3MgY29udGFpbmluZyBDezxUQUI+fXMsIGFuZCBzdWdnZXN0ZWQgbWV0aG9kcyB0byBtYWludGFpbiBhCiAgICAgICAgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBwYXJzZWQgc3RyaW5nLCB0aGUgcGFyc2UgbG9jYXRpb24sIGFuZCBsaW5lIGFuZCBjb2x1bW4KICAgICAgICBwb3NpdGlvbnMgd2l0aGluIHRoZSBwYXJzZWQgc3RyaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIgKyAnLycgKyBpbnRlZ2VyICsgJy8nICsgaW50ZWdlcgoKICAgICAgICAgICAgZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KCiAgICAgICAgICAgICMgdXNlIHBhcnNlIGFjdGlvbiB0byBjb252ZXJ0IHRvIGludHMgYXQgcGFyc2UgdGltZQogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKS5zZXRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogaW50KHRva3NbMF0pKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIgKyAnLycgKyBpbnRlZ2VyICsgJy8nICsgaW50ZWdlcgoKICAgICAgICAgICAgIyBub3RlIHRoYXQgaW50ZWdlciBmaWVsZHMgYXJlIG5vdyBpbnRzLCBub3Qgc3RyaW5ncwogICAgICAgICAgICBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpICAjIC0+IFsxOTk5LCAnLycsIDEyLCAnLycsIDMxXQogICAgICAgIHKMAQAARikGctMAAADaA21hcHJzAQAAcnkBAABy4AAAAHKMAQAAKQNypAAAANoDZm5zcgQBAABydwAAAHJ3AAAAcngAAABygQAAAMsEAABzBgAAAAAiFAEOAXocUGFyc2VyRWxlbWVudC5zZXRQ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ICAgICAgICAgICB3aWxsIGxpbWl0IHRoZSBzaXplIG9mIHRoZSBwYWNrcmF0IGNhY2hlOyBpZiBOb25lIGlzIHBhc3NlZCwgdGhlbgogICAgICAgICAgICAgIHRoZSBjYWNoZSBzaXplIHdpbGwgYmUgdW5ib3VuZGVkOyBpZiAwIGlzIHBhc3NlZCwgdGhlIGNhY2hlIHdpbGwKICAgICAgICAgICAgICBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4KICAgICAgICAgICAgCiAgICAgICAgICAgVGhpcyBzcGVlZHVwIG1heSBicmVhayBleGlzdGluZyBwcm9ncmFtcyB0aGF0IHVzZSBwYXJzZSBhY3Rpb25zIHRoYXQKICAgICAgICAgICBoYXZlIHNpZGUtZWZmZWN0cy4gIEZvciB0aGlzIHJlYXNvbiwgcGFja3JhdCBwYXJzaW5nIGlzIGRpc2FibGVkIHdoZW4KICAgICAgICAgICB5b3UgZmlyc3QgaW1wb3J0IHB5cGFyc2luZy4gIFRvIGFjdGl2YXRlIHRoZSBwYWNrcmF0IGZlYXR1cmUsIHlvdXIKICAgICAgICAgICBwcm9ncmFtIG11c3QgY2FsbCB0aGUgY2xhc3MgbWV0aG9kIEN7UGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0KCl9LiAgSWYKICAgICAgICAgICB5b3VyIHByb2dyYW0gdXNlcyBDe3BzeWNvfSB0byAiY29tcGlsZSBhcyB5b3UgZ28iLCB5b3UgbXVzdCBjYWxsCiAgICAgICAgICAgQ3tlbmFibGVQYWNrcmF0fSBiZWZvcmUgY2FsbGluZyBDe3BzeWNvLmZ1bGwoKX0uICBJZiB5b3UgZG8gbm90IGRvIHRoaXMsCiAgICAgICAgICAgUHl0aG9uIHdpbGwgY3Jhc2guICBGb3IgYmVzdCByZXN1bHRzLCBjYWxsIEN7ZW5hYmxlUGFja3JhdCgpfSBpbW1lZGlhdGVseQogICAgICAgICAgIGFmdGVyIGltcG9ydGluZyBweXBhcnNpbmcuCiAgICAgICAgICAgCiAgICAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgICAgIGltcG9ydCBweXBhcnNpbmcKICAgICAgICAgICAgICAgcHlwYXJzaW5nLlBhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdCgpCiAgICAgICAgVE4pB3IkAAAA2g9fcGFja3JhdEVuYWJsZWRywgEAAHLMAQAAcsYBAABy0QEAAHKdAQAAKQHaEGNhY2hlX3NpemVfbGltaXRydwAAAHJ3AAAAcngAAADaDWVuYWJsZVBhY2tyYXQABgAAcwwAAAAAGwYBBgEIAQwCDAF6G1BhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdGMDAAAAAAAAAAgAAAAQAAAAQwAAAHOyAAAAdABqAYMAAQB8AGoCcxZ8AGoDgwABAHgWfABqBEQAXQx9A3wDagODAAEAcR5XAHwAagVzPHwBagaDAH0BeTx8AGoHfAFkAYMCXAJ9BH0FfAJydnwAagh8AXwEgwJ9BHQJgwB0CoMAFwB9BnwGagd8AXwEgwIBAFcAbjAEAHQLawpyqAEAfQcBAHoUdABqDHKUggBuBHwHggFXAFkAZAJkAn0HfgdYAG4GWAB8BVMAZAJTACkDYUIFAAAKICAgICAgICBFeGVjdXRlIHRoZSBwYXJzZSBleHByZXNzaW9uIHdpdGggdGhlIGdpdmVuIHN0cmluZy4KICAgICAgICBUaGlzIGlzIHRoZSBtYWluIGludGVyZmFjZSB0byB0aGUgY2xpZW50IGNvZGUsIG9uY2UgdGhlIGNvbXBsZXRlCiAgICAgICAgZXhwcmVzc2lvbiBoYXMgYmVlbiBidWlsdC4KCiAgICAgICAgSWYgeW91IHdhbnQgdGhlIGdyYW1tYXIgdG8gcmVxdWlyZSB0aGF0IHRoZSBlbnRpcmUgaW5wdXQgc3RyaW5nIGJlCiAgICAgICAgc3VjY2Vzc2Z1bGx5IHBhcnNlZCwgdGhlbiBzZXQgQ3twYXJzZUFsbH0gdG8gVHJ1ZSAoZXF1aXZhbGVudCB0byBlbmRpbmcKICAgICAgICB0aGUgZ3JhbW1hciB3aXRoIEN7THtTdHJpbmdFbmQoKX19KS4KCiAgICAgICAgTm90ZTogQ3twYXJzZVN0cmluZ30gaW1wbGljaXRseSBjYWxscyBDe2V4cGFuZHRhYnMoKX0gb24gdGhlIGlucHV0IHN0cmluZywKICAgICAgICBpbiBvcmRlciB0byByZXBvcnQgcHJvcGVyIGNvbHVtbiBudW1iZXJzIGluIHBhcnNlIGFjdGlvbnMuCiAgICAgICAgSWYgdGhlIGlucHV0IHN0cmluZyBjb250YWlucyB0YWJzIGFuZAogICAgICAgIHRoZSBncmFtbWFyIHVzZXMgcGFyc2UgYWN0aW9ucyB0aGF0IHVzZSB0aGUgQ3tsb2N9IGFyZ3VtZW50IHRvIGluZGV4IGludG8gdGhlCiAgICAgICAgc3RyaW5nIGJlaW5nIHBhcnNlZCwgeW91IGNhbiBlbnN1cmUgeW91IGhhdmUgYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGlucHV0CiAgICAgICAgc3RyaW5nIGJ5OgogICAgICAgICAtIGNhbGxpbmcgQ3twYXJzZVdpdGhUYWJzfSBvbiB5b3VyIGdyYW1tYXIgYmVmb3JlIGNhbGxpbmcgQ3twYXJzZVN0cmluZ30KICAgICAgICAgICAoc2VlIEx7SXtwYXJzZVdpdGhUYWJzfTxwYXJzZVdpdGhUYWJzPn0pCiAgICAgICAgIC0gZGVmaW5lIHlvdXIgcGFyc2UgYWN0aW9uIHVzaW5nIHRoZSBmdWxsIEN7KHMsbG9jLHRva3MpfSBzaWduYXR1cmUsIGFuZAogICAgICAgICAgIHJlZmVyZW5jZSB0aGUgaW5wdXQgc3RyaW5nIHVzaW5nIHRoZSBwYXJzZSBhY3Rpb24ncyBDe3N9IGFyZ3VtZW50CiAgICAgICAgIC0gZXhwbGljdGx5IGV4cGFuZCB0aGUgdGFicyBpbiB5b3VyIGlucHV0IHN0cmluZyBiZWZvcmUgY2FsbGluZwogICAgICAgICAgIEN7cGFyc2VTdHJpbmd9CiAgICAgICAgCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIFdvcmQoJ2EnKS5wYXJzZVN0cmluZygnYWFhYWFiYWFhJykgICMgLT4gWydhYWFhYSddCiAgICAgICAgICAgIFdvcmQoJ2EnKS5wYXJzZVN0cmluZygnYWFhYWFiYWFhJywgcGFyc2VBbGw9VHJ1ZSkgICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCBlbmQgb2YgdGV4dAogICAgICAgIHIBAAAATikNciQAAABy0gEAAHKFAQAA2gpzdHJlYW1saW5lcoMBAAByggEAANoKZXhwYW5kdGFic3KdAQAAcrABAAByDQAAAHIpAAAAch0AAADaEnZlcmJvc2Vfc3RhY2t0cmFjZSkIcqQAAAByTwEAANoIcGFyc2VBbGxyqwEAAHKfAAAAcrcBAADaAnNlclYBAABydwAAAHJ3AAAAcngAAADaC3BhcnNlU3RyaW5nIwYAAHMkAAAAABsIAQYBCAIMAQwBBgEIAQIBEAEEAQwBDAEQARABBgEEAxYCehlQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nYwQAAAAAAAAADwAAABEAAABjAAAAc0ABAAB8AGoAcw58AGoBgwABAHgWfABqAkQAXQx9BHwEagGDAAEAcRZXAHwAagNzOHQEfAGDAWoFgwB9AXQGfAGDAX0FZAF9BnwAagd9B3wAagh9CHQJagqDAAEAZAF9CXmqeKR8BnwFawFvbnwJfAJrAJABcgJ5IHwHfAF8BoMCfQp8CHwBfApkAmQDjQNcAn0LfQxXAG4cBAB0C2sKcq4BAAEAAQB8CmQEFwB9BlkAcWBYAHwLfAZrBHL4fAlkBDcAfQl8DHwKfAtmA1YAAQB8A3LyfAd8AXwGgwJ9DXwNfAZrBHLofAt9BnH2fAZkBDcAfQZuBHwLfQZxYHwKZAQXAH0GcWBXAFcAbjQEAHQMawqQAXI6AQB9DgEAehZ0CWoNkAFyJoIAbgR8DoIBVwBZAGQFZAV9Dn4OWABuAlgAZAVTACkGYYYEAAAKICAgICAgICBTY2FuIHRoZSBpbnB1dCBzdHJpbmcgZm9yIGV4cHJlc3Npb24gbWF0Y2hlcy4gIEVhY2ggbWF0Y2ggd2lsbCByZXR1cm4gdGhlCiAgICAgICAgbWF0Y2hpbmcgdG9rZW5zLCBzdGFydCBsb2NhdGlvbiwgYW5kIGVuZCBsb2NhdGlvbi4gIE1heSBiZSBjYWxsZWQgd2l0aCBvcHRpb25hbAogICAgICAgIEN7bWF4TWF0Y2hlc30gYXJndW1lbnQsIHRvIGNsaXAgc2Nhbm5pbmcgYWZ0ZXIgJ24nIG1hdGNoZXMgYXJlIGZvdW5kLiAgSWYKICAgICAgICBDe292ZXJsYXB9IGlzIHNwZWNpZmllZCwgdGhlbiBvdmVybGFwcGluZyBtYXRjaGVzIHdpbGwgYmUgcmVwb3J0ZWQuCgogICAgICAgIE5vdGUgdGhhdCB0aGUgc3RhcnQgYW5kIGVuZCBsb2NhdGlvbnMgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBzdHJpbmcKICAgICAgICBiZWluZyBwYXJzZWQuICBTZWUgTHtJe3BhcnNlU3RyaW5nfTxwYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhcnNpbmcKICAgICAgICBzdHJpbmdzIHdpdGggZW1iZWRkZWQgdGFicy4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIHNvdXJjZSA9ICJzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODciCiAgICAgICAgICAgIHByaW50KHNvdXJjZSkKICAgICAgICAgICAgZm9yIHRva2VucyxzdGFydCxlbmQgaW4gV29yZChhbHBoYXMpLnNjYW5TdHJpbmcoc291cmNlKToKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArICdeJyooZW5kLXN0YXJ0KSkKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArIHRva2Vuc1swXSkKICAgICAgICAKICAgICAgICBwcmludHM6OgogICAgICAgIAogICAgICAgICAgICBzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODcKICAgICAgICAgICAgXl5eXl4KICAgICAgICAgICAgc2xkamYKICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgbHNkamprZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xka2pmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsa2pzZmQKICAgICAgICByAQAAAEYpAXKZAQAAcnIAAABOKQ5yhQEAAHLXAQAAcoMBAAByggEAAHKFAAAActgBAABy5QAAAHKwAQAAcp0BAAByJAAAAHLSAQAAch8AAAByHQAAAHLZAQAA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ICAgICAgICAgLSBDe2V4cHIqKG4sTm9uZSl9IG9yIEN7ZXhwcioobiwpfSBpcyBlcXVpdmFsZW50CiAgICAgICAgICAgICAgdG8gQ3tleHByKm4gKyBMe1plcm9Pck1vcmV9KGV4cHIpfQogICAgICAgICAgICAgIChyZWFkIGFzICJhdCBsZWFzdCBuIGluc3RhbmNlcyBvZiBDe2V4cHJ9IikKICAgICAgICAgLSBDe2V4cHIqKE5vbmUsbil9IGlzIGVxdWl2YWxlbnQgdG8gQ3tleHByKigwLG4pfQogICAgICAgICAgICAgIChyZWFkIGFzICIwIHRvIG4gaW5zdGFuY2VzIG9mIEN7ZXhwcn0iKQogICAgICAgICAtIEN7ZXhwciooTm9uZSxOb25lKX0gaXMgZXF1aXZhbGVudCB0byBDe0x7WmVyb09yTW9yZX0oZXhwcil9CiAgICAgICAgIC0gQ3tleHByKigxLE5vbmUpfSBpcyBlcXVpdmFsZW50IHRvIEN7THtPbmVPck1vcmV9KGV4cHIpfQoKICAgICAgICBOb3RlIHRoYXQgQ3tleHByKihOb25lLG4pfSBkb2VzIG5vdCByYWlzZSBhbiBleGNlcHRpb24gaWYKICAgICAgICBtb3JlIHRoYW4gbiBleHBycyBleGlzdCBpbiB0aGUgaW5wdXQgc3RyZWFtOyB0aGF0IGlzLAogICAgICAgIEN7ZXhwciooTm9uZSxuKX0gZG9lcyBub3QgZW5mb3JjZSBhIG1heGltdW0gbnVtYmVyIG9mIGV4cHIKICAgICAgICBvY2N1cnJlbmNlcy4gIElmIHRoaXMgYmVoYXZpb3IgaXMgZGVzaXJlZCwgdGhlbiB3cml0ZQogICAgICAgIEN7ZXhwciooTm9uZSxuKSArIH5leHByfQogICAgICAgIHIBAAAATnJxAAAAcnIAAAB6N2Nhbm5vdCBtdWx0aXBseSAnUGFyc2VyRWxlbWVudCcgYW5kICgnJXMnLCclcycpIG9iamVjdHN6MGNhbm5vdCBtdWx0aXBseSAnUGFyc2VyRWxlbWVudCcgYW5kICclcycgb2JqZWN0c3ovY2Fubm90IG11bHRpcGx5IFBhcnNlckVsZW1lbnQgYnkgbmVnYXRpdmUgdmFsdWV6QHNlY29uZCB0dXBs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dGVybSA9IHdkIHwgaW50ZWdlcgogICAgICAgICAgICAKICAgICAgICAgICAgIyB0dXJuIG9uIGRlYnVnZ2luZyBmb3Igd2QKICAgICAgICAgICAgd2Quc2V0RGVidWcoKQoKICAgICAgICAgICAgT25lT3JNb3JlKHRlcm0pLnBhcnNlU3RyaW5nKCJhYmMgMTIzIHh5eiA4OTAiKQogICAgICAgIAogICAgICAgIHByaW50czo6CiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMCgxLDEpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsnYWJjJ10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAzKDEsNCkKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgNCksIChsaW5lOjEsIGNvbDo1KQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDcoMSw4KQogICAgICAgICAgICBNYXRjaGVkIGFscGhhd29yZCAtPiBbJ3h5eiddCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTEoMSwxMikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTIpLCAobGluZToxLCBjb2w6MTMpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTUoMSwxNikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTUpLCAobGluZToxLCBjb2w6MTYpCgogICAgICAgIFRoZSBvdXRwdXQgc2hvd24gaXMgdGhhdCBwcm9kdWNlZCBieSB0aGUgZGVmYXVsdCBkZWJ1ZyBhY3Rpb25zIC0gY3VzdG9tIGRlYnVnIGFjdGlvbnMgY2FuIGJlCiAgICAgICAgc3BlY2lmaWVkIHVzaW5nIEx7c2V0RGVidWdBY3Rpb25zfS4gUHJpb3IgdG8gYXR0ZW1wdGluZwogICAgICAgIHRvIG1hdGNoIHRo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AHQUawqQAXK6AQB9DwEAeiZ8C2oKZA50BHwPgwEXAIMBAQB8CZABb6R8Bn0JfA99DFcAWQBkAmQCfQ9+D1gAbgJYAHwFkAFy4HwEkAFy0nwLagpkCYMBAQB0FWQEagt8C4MBgwEBAHwHagp8CnwMZgKDAQEAcUhXAHwJfAdmAlMAKQ9hMwwAAAogICAgICAgIEV4ZWN1dGUgdGhlIHBhcnNlIGV4cHJlc3Npb24gb24gYSBzZXJpZXMgb2YgdGVzdCBzdHJpbmdzLCBzaG93aW5nIGVhY2gKICAgICAgICB0ZXN0LCB0aGUgcGFyc2VkIHJlc3VsdHMgb3Igd2hlcmUgdGhlIHBhcnNlIGZhaWxlZC4gUXVpY2sgYW5kIGVhc3kgd2F5IHRvCiAgICAgICAgcnVuIGEgcGFyc2UgZXhwcmVzc2lvbiBhZ2FpbnN0IGEgbGlzdCBvZiBzYW1wbGUgc3RyaW5ncy4KICAgICAgICAgICAKICAgICAgICBQYXJhbWV0ZXJzOgogICAgICAgICAtIHRlc3RzIC0gYSBsaXN0IG9mIHNlcGFyYXRlIHRlc3Qgc3RyaW5ncywgb3IgYSBtdWx0aWxpbmUgc3RyaW5nIG9mIHRlc3Qgc3RyaW5ncwogICAgICAgICAtIHBhcnNlQWxsIC0gKGRlZmF1bHQ9Q3tUcnVlfSkgLSBmbGFnIHRvIHBhc3MgdG8gQ3tMe3BhcnNlU3RyaW5nfX0gd2hlbiBydW5uaW5nIHRlc3RzICAgICAgICAgICAKICAgICAgICAgLSBjb21tZW50IC0gKGRlZmF1bHQ9Q3snIyd9KSAtIGV4cHJlc3Npb24gZm9yIGluZGljYXRpbmcgZW1iZWRkZWQgY29tbWVudHMgaW4gdGhlIHRlc3QgCiAgICAgICAgICAgICAgc3RyaW5nOyBwYXNzIE5vbmUgdG8gZGlzYWJsZSBjb21tZW50IGZpbHRlcmluZwogICAgICAgICAtIGZ1bGxEdW1wIC0gKGRlZmF1bHQ9Q3tUcnVlfSkgLSBkdW1wIHJlc3VsdHMgYXMgbGlzdCBmb2xsb3dlZCBieSByZXN1bHRzIG5hbWVzIGluIG5lc3RlZCBvdXRsaW5lOwogICAgICAgICAgICAgIGlmIEZhbHNlLCBvbmx5IGR1bXAgbmVzdGVkIGxpc3QKICAgICAgICAgLSBwcmludFJlc3VsdHMgLSAoZGVmYXVsdD1De1RydWV9KSBwcmludHMgdGVzdCBvdXRwdXQgdG8gc3Rkb3V0CiAgICAgICAgIC0gZmFpbHVyZVRlc3RzIC0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGluZGljYXRlcyBpZiB0aGVzZSB0ZXN0cyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCBwYXJzaW5nCgogICAgICAgIFJldHVybnM6IGEgKHN1Y2Nlc3MsIHJlc3VsdHMpIHR1cGxlLCB3aGVyZSBzdWNjZXNzIGluZGljYXRlcyB0aGF0IGFsbCB0ZXN0cyBzdWNjZWVkZWQKICAgICAgICAob3IgZmFpbGVkIGlmIEN7ZmFpbHVyZVRlc3RzfSBpcyBUcnVlKSwgYW5kIHRoZSByZXN1bHRzIGNvbnRhaW4gYSBsaXN0IG9mIGxpbmVzIG9mIGVhY2ggCiAgICAgICAgdGVzdCdzIG91dHB1dAogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBudW1iZXJfZXhwciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyLmNvcHkoKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgICAgIDEwMAogICAgICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgICAgICcnJykKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgICcnJywgZmFpbHVyZVRlc3RzPVRydWUpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgIyB1bnNpZ25lZCBpbnRlZ2VyCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICBbMTAwXQoKICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgWy0xMDBdCgogICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgICAgICMgaW50ZWdlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgWzFlLTEyXQoKICAgICAgICAgICAgU3VjY2VzcwogICAgICAgICAgICAKICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgMTAwWgogICAgICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIGVuZCBvZiB0ZXh0IChhdCBjaGFyIDMpLCAobGluZToxLCBjb2w6NCkKCiAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgLS4xMDAKICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCB7cmVhbCBudW1iZXIgd2l0aCBz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cyB3ZXJlIGZvdW5kCiAgICAgLSBDe29yaWdpbmFsfSAtIHRoZSBvcmlnaW5hbCBtYXRjaF9zdHJpbmcgdXNlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIGlucHV0IHN0cmluZwogICAgCiAgICBJZiBDe21pc21hdGNoZXN9IGlzIGFuIGVtcHR5IGxpc3QsIHRoZW4gdGhlIG1hdGNoIHdhcyBhbiBleGFjdCBtYXRjaC4KICAgIAogICAgRXhhbXBsZTo6CiAgICAgICAgcGF0dCA9IENsb3NlTWF0Y2goIkFUQ0FUQ0dBQVRHR0EiKQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FUQ0dBQVhHR0EiKSAjIC0+IChbJ0FUQ0FUQ0dBQVhHR0EnXSwgeydtaXNtYXRjaGVzJzogW1s5XV0sICdvcmlnaW5hbCc6IFsnQVRDQVRDR0FBVEdHQSddfSkKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBWENHQUFYR0dBIikgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkICdBVENBVENHQUFUR0dBJyAod2l0aCB1cCB0byAxIG1pc21hdGNoZXMpIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKCiAgICAgICAgIyBleGFjdCBtYXRjaAogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FUQ0dBQVRHR0EiKSAjIC0+IChbJ0FUQ0FUQ0dBQVRHR0EnXSwgeydtaXNtYXRjaGVzJzogW1tdXSwgJ29yaWdpbmFsJzogWydBVENBVENHQUFUR0dBJ119KQoKICAgICAgICAjIGNsb3NlIG1hdGNoIGFsbG93aW5nIHVwIHRvIDIgbWlzbWF0Y2hlcwogICAgICAgIHBhdHQgPSBDbG9zZU1hdGNoKCJBVENBVENHQUFUR0dBIiwgbWF4TWlzbWF0Y2hlcz0yKQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FYQ0dBQVhHR0EiKSAjIC0+IChbJ0FUQ0FYQ0dBQVhHR0EnXSwgeydtaXNtYXRjaGVzJzogW1s0LCA5XV0sICdvcmlnaW5hbCc6IFsnQVRDQVRDR0FBVEdHQSddfSkKICAgIHJyAAAAYwMAAAAAAAAAAwAAAAMAAAADAAAAc0IAAAB0AHQBfACDAmoCgwABAHwBfABfA3wBfABfBHwCfABfBWQBfABqBHwAagVmAhYAfABfBmQCfABfB2QCfABfCGQAUwApA056JkV4cGVjdGVkICVyICh3aXRoIHVwIHRvICVkIG1pc21hdGNoZXMpRikJchoCAABybAAAAHKmAAAAcsoAAADaDG1hdGNoX3N0cmluZ9oNbWF4TWlzbWF0Y2hlc3KHAQAAcoYBAABygQEAACkDcqQAAAByQQIAAHJCAgAAKQFybAEAAHJ3AAAAcngAAABypgAAAOEJAABzDgAAAAABDgEGAQYBBgESAQYBehNDbG9zZU1hdGNoLl9faW5pdF9fVGMEAAAAAAAAAA8AAAAFAAAAQwAAAHPMAAAAfAJ9BHQAfAGDAX0FfAR0AHwAagGDARcAfQZ8BnwFawFyuHwAagF9B2QBfQhnAH0JfABqAn0KeIB0A3QEfAF8AnwGhQIZAHwAagGDAoMBRABdMFwCfQh9C3wLXAJ9DH0NfAx8DWsDclB8CWoFfAiDAQEAdAB8CYMBfAprBHJQUABxUFcAfAhkAhcAfQJ0BnwBfAR8AoUCGQBnAYMBfQ58AGoBfA5kAzwAfAl8DmQEPAB8AnwOZgJTAHQHfAF8AnwAagh8AIMEggFkAFMAKQVOcgEAAABycgAAANoIb3JpZ2luYWzaCm1pc21hdGNoZXMpCXLlAAAAckECAAByQgIAAHLqAAAAco0AAAByDAEAAHIiAAAAch8AAAByhwEAACkPcqQAAAByTwEAAHKfAAAAcpgBAADaBXN0YXJ0cq8BAADaBm1heGxvY3JBAgAA2g9tYXRjaF9zdHJpbmdsb2NyRAIAAHJCAgAA2gNzX23aA3NyY9oDbWF02gdyZXN1bHRzcncAAABydwAAAHJ4AAAAcrEBAADqCQAAcygAAAAAAQQBCAEOAggBBgEEAQQBBgIiAQgBCAEKAQwBBgIIARIBCgEIAQgCehRDbG9zZU1hdGNoLnBhcnNlSW1wbCkBcnIAAAApAVQpB3KWAAAAcpcAAABymAAAAHK6AAAAcqYAAABysQEAAHI0AgAAcncAAABydwAAACkBcmwBAAByeAAAAHJsAAAAyAkAAHMGAAAACBgEAQ4JYwAAAAAAAAAAAAAAAAYAAAAAAAAAczgAAABlAFoBZABaAmQBWgNkDYcAZgFkBmQHhAlaBGQOZAlkCoQBWgWHAGYBZAtkDIQIWgaHAAQAWgdTACkPci8AAABhFAkAAAogICAgVG9rZW4gZm9yIG1hdGNoaW5nIHdvcmRzIGNvbXBvc2VkIG9mIGFsbG93ZWQgY2hhcmFjdGVyIHNldHMuCiAgICBEZWZpbmVkIHdpdGggc3RyaW5nIGNvbnRhaW5pbmcgYWxsIGFsbG93ZWQgaW5pdGlhbCBjaGFyYWN0ZXJzLAogICAgYW4gb3B0aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgYWxsb3dlZCBib2R5IGNoYXJhY3RlcnMgKGlmIG9taXR0ZWQsCiAgICBkZWZhdWx0cyB0byB0aGUgaW5pdGlhbCBjaGFyYWN0ZXIgc2V0KSwgYW5kIGFuIG9wdGlvbmFsIG1pbmltdW0sCiAgICBtYXhpbXVtLCBhbmQvb3IgZXhhY3QgbGVuZ3RoLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIEN7bWlufSBpcyAxIChhCiAgICBtaW5pbXVtIHZhbHVlIDwgMSBpcyBub3QgdmFsaWQpOyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIEN7bWF4fSBhbmQgQ3tleGFjdH0KICAgIGFyZSAwLCBtZWFuaW5nIG5vIG1heGltdW0gb3IgZXhhY3QgbGVuZ3RoIHJlc3RyaWN0aW9uLiBBbiBvcHRpb25hbAogICAgQ3tleGNsdWRlQ2hhcnN9IHBhcmFtZXRlciBjYW4gbGlzdCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUgZm91bmQgaW4gCiAgICB0aGUgaW5wdXQgQ3tib2R5Q2hhcnN9IHN0cmluZzsgdXNlZnVsIHRvIGRlZmluZSBhIHdvcmQgb2YgYWxsIHByaW50YWJsZXMKICAgIGV4Y2VwdCBmb3Igb25lIG9yIHR3byBjaGFyYWN0ZXJzLCBmb3IgaW5zdGFuY2UuCiAgICAKICAgIEx7c3JhbmdlfSBpcyB1c2VmdWwgZm9yIGRlZmluaW5nIGN1c3RvbSBjaGFyYWN0ZXIgc2V0IHN0cmluZ3MgZm9yIGRlZmluaW5nIAogICAgQ3tXb3JkfSBleHByZXNzaW9ucywgdXNpbmcgcmFuZ2Ugbm90YXRpb24gZnJvbSByZWd1bGFyIGV4cHJlc3Npb24gY2hhcmFjdGVyIHNldHMuCiAgICAKICAgIEEgY29tbW9uIG1pc3Rha2UgaXMgdG8gdXNlIEN7V29yZH0gdG8gbWF0Y2ggYSBzcGVjaWZpYyBsaXRlcmFsIHN0cmluZywgYXMgaW4gCiAgICBDe1dvcmQoIkFkZHJlc3MiKX0uIFJlbWVtYmVyIHRoYXQgQ3tXb3JkfSB1c2VzIHRoZSBzdHJpbmcgYXJndW1lbnQgdG8gZGVmaW5lCiAgICBJe3NldHN9IG9mIG1hdGNoYWJsZSBjaGFyYWN0ZXJzLiBUaGlzIGV4cHJlc3Npb24gd291bGQgbWF0Y2ggIkFkZCIsICJBQUEiLAogICAgImRBcmVkIiwgb3IgYW55IG90aGVyIHdvcmQgbWFkZSB1cCBvZiB0aGUgY2hhcmFjdGVycyAnQScsICdkJywgJ3InLCAnZScsIGFuZCAncycuCiAgICBUbyBtYXRjaCBhbiBleGFjdCBsaXRlcmFsIHN0cmluZywgdXNlIEx7TGl0ZXJhbH0gb3IgTHtLZXl3b3JkfS4KCiAgICBweXBhcnNpbmcgaW5jbHVkZXMgaGVscGVyIHN0cmluZ3MgZm9yIGJ1aWxkaW5nIFdvcmRzOgogICAgIC0gTHthbHBoYXN9CiAgICAgLSBMe251bXN9CiAgICAgLSBMe2FscGhhbnVtc30KICAgICAtIEx7aGV4bnVtc30KICAgICAtIEx7YWxwaGFzOGJpdH0gKGFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1IC0gYWNjZW50ZWQsIHRpbGRlZCwgdW1sYXV0ZWQsIGV0Yy4pCiAgICAgLSBMe3B1bmM4Yml0fSAobm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1IC0gY3VycmVuY3ksIHN5bWJvbHMsIHN1cGVyc2NyaXB0cywgZGlhY3JpdGljYWxzLCBldGMuKQogICAgIC0gTHtwcmludGFibGVzfSAoYW55IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcikKCiAgICBFeGFtcGxlOjoKICAgICAgICAjIGEgd29yZCBjb21wb3NlZCBvZiBkaWdpdHMKICAgICAgICBpbnRl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Zm9yIG1hdGNoaW5nIHN0cmluZ3MgdGhhdCBhcmUgZGVsaW1pdGVkIGJ5IHF1b3RpbmcgY2hhcmFjdGVycy4KICAgIAogICAgRGVmaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKICAgICAgICAtIHF1b3RlQ2hhciAtIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZSBxdW90ZSBkZWxpbWl0aW5nIHN0cmluZwogICAgICAgIC0gZXNjQ2hhciAtIGNoYXJhY3RlciB0byBlc2NhcGUgcXVvdGVzLCB0eXBpY2FsbHkgYmFja3NsYXNoIChkZWZhdWx0PUN7Tm9uZX0pCiAgICAgICAgLSBlc2NRdW90ZSAtIHNwZWNpYWwgcXVvdGUgc2VxdWVuY2UgdG8gZXNjYXBlIGFuIGVtYmVkZGVkIHF1b3RlIHN0cmluZyAoc3VjaCBhcyBTUUwncyAiIiB0byBlc2NhcGUgYW4gZW1iZWRkZWQgIikgKGRlZmF1bHQ9Q3tOb25lfSkKICAgICAgICAtIG11bHRpbGluZSAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHF1b3RlcyBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcyAoZGVmYXVsdD1De0ZhbHNlfSkKICAgICAgICAtIHVucXVvdGVSZXN1bHRzIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hdGNoZWQgdGV4dCBzaG91bGQgYmUgdW5xdW90ZWQgKGRlZmF1bHQ9Q3tUcnVlfSkKICAgICAgICAtIGVuZFF1b3RlQ2hhciAtIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZSBlbmQgb2YgdGhlIHF1b3RlIGRlbGltaXRlZCBzdHJpbmcgKGRlZmF1bHQ9Q3tOb25lfSA9PiBzYW1lIGFzIHF1b3RlQ2hhcikKICAgICAgICAtIGNvbnZlcnRXaGl0ZXNwYWNlRXNjYXBlcyAtIGNvbnZlcnQgZXNjYXBlZCB3aGl0ZXNwYWNlIChDeydcdCd9LCBDeydcbid9LCBldGMuKSB0byBhY3R1YWwgd2hpdGVzcGFjZSAoZGVmYXVsdD1D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c2hhcGUgYW5kIHBvc24gYXJlIHJlcXVpcmVkLCBjb2xvciBhbmQgc2l6ZSBhcmUgb3B0aW9uYWwpCiAgICAgICAgc2hhcGVfc3BlYyA9IHNoYXBlX2F0dHIgJiBwb3NuX2F0dHIgJiBPcHRpb25hbChjb2xvcl9hdHRyKSAmIE9wdGlvbmFsKHNpemVfYXR0cikKCiAgICAgICAgc2hhcGVfc3BlYy5ydW5UZXN0cygnJycKICAgICAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgICAgICBjb2xvcjpHUkVFTiBzaXplOjIwIHNoYXBlOlRSSUFOR0xFIHBvc246MjAsNDAKICAgICAgICAgICAgJycnCiAgICAgICAgICAgICkKICAgIHByaW50czo6CiAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICBbJ3NoYXBlOicsICdTUVVBUkUnLCAnY29sb3I6JywgJ0JMQUNLJywgJ3Bvc246JywgWycxMDAnLCAnLCcsICcxMjAnXV0KICAgICAgICAtIGNvbG9yOiBCTEFDSwogICAgICAgIC0gcG9zbjogWycxMDAnLCAnLCcsICcxMjAnXQogICAgICAgICAgLSB4OiAxMDAKICAgICAgICAgIC0geTogMTIwCiAgICAgICAgLSBzaGFwZTogU1FVQVJFCgoKICAgICAgICBzaGFwZTogQ0lSQ0xFIHNpemU6IDUwIGNvbG9yOiBCTFVFIHBvc246IDUwLDgwCiAgICAgICAgWydzaGFwZTonLCAnQ0lSQ0xFJywgJ3NpemU6JywgJzUwJywgJ2NvbG9yOicsICdCTFVFJywgJ3Bvc246JywgWyc1MCcsICcsJywgJzgwJ11dCiAgICAgICAgLSBjb2xvcjogQkxVRQogICAgICAgIC0gcG9zbjogWyc1MCcsICcsJywgJzgwJ10KICAgICAgICAgIC0geDogNTAKICAgICAgICAgIC0geTogODAKICAgICAgICAtIHNoYXBlOiBD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dCBtdXN0IG1hdGNoIG9uZSBvciBtb3JlIHRpbWVzCiAgICAgLSBzdG9wT24gLSAoZGVmYXVsdD1De05vbmV9KSAtIGV4cHJlc3Npb24gZm9yIGEgdGVybWluYXRpbmcgc2VudGluZWwKICAgICAgICAgIChvbmx5IHJlcXVpcmVkIGlmIHRoZSBzZW50aW5lbCB3b3VsZCBvcmRpbmFyaWx5IG1hdGNoIHRoZSByZXBldGl0aW9uIAogICAgICAgICAgZXhwcmVzc2lvbikgICAgICAgICAgCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGF0YV93b3JkID0gV29yZChhbHBoYXMpCiAgICAgICAgbGFiZWwgPSBkYXRhX3dvcmQgKyBGb2xsb3dlZEJ5KCc6JykKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBCTEFDSyIKICAgICAgICBPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKSAgIyBGYWlsISByZWFkICdjb2xvcicgYXMgZGF0YSBpbnN0ZWFkIG9mIG5leHQgbGFiZWwgLT4gW1snc2hhcGUnLCAnU1FVQVJFIGNvbG9yJ11dCgogICAgICAgICMgdXNlIHN0b3BPbiBhdHRyaWJ1dGUgZm9yIE9uZU9yTW9yZSB0byBhdm9pZCByZWFkaW5nIGxhYmVsIHN0cmluZyBhcyBwYXJ0IG9mIHRoZSBkYXRhCiAgICAgICAgYXR0cl9leHByID0gR3JvdXAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCiAgICAgICAgT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkucHByaW50KCkgIyBCZXR0ZXIgLT4gW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsncG9zbicsICd1cHBlciBsZWZ0J10sIFsnY29sb3InLCAnQkxBQ0snXV0KICAgICAgICAKICAgICAgICAjIGNvdWxkIGFsc28gYmUgd3JpdHRlbiBhcwogICAgICAgIChhdHRyX2V4cHIgKiAoMSwpKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKQogICAgYwEAAAAAAAAAAQAAAAMAAABDAAAAczQAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAawhyLmQCdAN8AGoEgwEXAGQDFwB8AF8CfABqAlMAKQROcsoAAABylgIAAHoEfS4uLikFcvkAAAByygAAAHJ7AQAAcoUAAAByUAEAACkBcqQAAABydwAAAHJ3AAAAcngAAAByrgAAACEPAABzCgAAAAABCgEGAgoBFAJ6EU9uZU9yTW9yZS5fX3N0cl9fTikFcpYAAABylwAAAHKYAAAAcroAAAByrgAAAHJ3AAAAcncAAABydwAAAHJ4AAAAchkAAAAHDwAAcwQAAAAIGAQCYwAAAAAAAAAAAAAAAAQAAAAAAAAAczgAAABlAFoBZABaAmQBWgNkCocAZgFkA2QEhAlaBGQLhwBmAWQGZAeECVoFZAhkCYQAWgaHAAQAWgdTACkMcjIAAABhdwEAAAogICAgT3B0aW9uYWwgcmVwZXRpdGlvbiBvZiB6ZXJvIG9yIG1vcmUgb2YgdGhlIGdpdmVuIGV4cHJlc3Npb24uCiAgICAKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggemVybyBvciBtb3JlIHRpbWVzCiAgICAgLSBzdG9wT24gLSAoZGVmYXVsdD1De05vbmV9KSAtIGV4cHJlc3Npb24gZm9yIGEgdGVybWluYXRpbmcgc2VudGluZWwKICAgICAgICAgIChvbmx5IHJlcXVpcmVkIGlmIHRoZSBzZW50aW5lbCB3b3VsZCBvcmRpbmFyaWx5IG1hdGNoIHRoZSByZXBldGl0aW9uIAogICAgICAgICAgZXhwcmVzc2lvbikgICAgICAgICAgCgogICAgRXhhbXBsZTogc2ltaWxhciB0byBMe09uZU9yTW9yZX0KICAgIE5jAwAAAAAAAAADAAAABAAAAAMAAABzHgAAAHQAdAF8AIMCagJ8AXwCZAGNAgEAZAJ8AF8DZABTACkDTikBcrYCAABUKQRyGgIAAHIyAAAAcqYAAABygQEAACkDcqQAAAByUAEAAHK2AgAAKQFybAEAAHJ3AAAAcngAAABypgAAADYPAABzBAAAAAABFAF6E1plcm9Pck1vcmUuX19pbml0X19UYwQAAAAAAAAABAAAAAwAAAADAAAAczYAAAB5FHQAdAF8AIMCagJ8AXwCfAODA1MABAB0A3QEZgJrCnIwAQABAAEAfAJnAGYCUwBYAGQAUwApAU4pBXIaAgAAcjIAAABysQEAAHIfAAAActwAAAApBHKkAAAAck8BAABynwAAAHKYAQAAKQFybAEAAHJ3AAAAcngAAABysQEAADoPAABzCAAAAAABAgEUARIBehRaZXJvT3JNb3JlLnBhcnNlSW1wbGMBAAAAAAAAAAEAAAADAAAAQwAAAHM0AAAAdAB8AGQBgwJyEHwAagFTAHwAagJkAGsIci5kAnQDfABqBIMBFwBkAxcAfABfAnwAagJTACkETnLKAAAAchwBAAB6BF0uLi4pBXL5AAAAcsoAAAByewEAAHKFAAAAclABAAApAXKkAAAAcncAAABydwAAAHJ4AAAAcq4AAABADwAAcwoAAAAAAQoBBgIKARQCehJaZXJvT3JNb3JlLl9fc3RyX18pAU4pAVQpCHKWAAAAcpcAAABymAAAAHK6AAAAcqYAAABysQEAAHKuAAAAcjQCAABydwAAAHJ3AAAAKQFybAEAAHJ4AAAAcjIAAAAqDwAAcwgAAAAICwQBDgQOBmMAAAAAAAAAAAAAAAACAAAAQAAAAHMgAAAAZQBaAWQAWgJkAWQChABaA2UDWgRkA2QEhABaBWQFUwApBtoKX051bGxUb2tlbmMBAAAAAAAAAAEAAAABAAAAQwAAAHMEAAAAZAFTACkCTkZydwAAACkBcqQAAABydwAAAHJ3AAAAcngAAABy9AAAAEoPAABzAgAAAAABehNfTnVsbFRva2VuLl9fYm9vbF9fYwEAAAAAAAAAAQAAAAEAAABDAAAAcwQAAABkAVMAKQJOcpsAAABydwAAACkBcqQAAABydwAAAHJ3AAAAcngAAAByrgAAAE0PAABzAgAAAAABehJfTnVsbFRva2VuLl9fc3RyX19OKQZylgAAAHKXAAAAcpgAAABy9AAAAHJHAQAAcq4AAABydwAAAHJ3AAAAcncAAAByeAAAAHK+AgAASQ8AAHMGAAAACAEIAgQBcr4CAABjAAAAAAAAAAAAAAAABAAAAAAAAABzNgAAAGUAWgFkAFoCZAFaA2UEZgGHAGYBZAJkA4QJWgVkCWQFZAaEAVoGZAdkCIQAWgeHAAQAWghTACkKchsAAABhYQMAAAogICAgT3B0aW9uYWwgbWF0Y2hpbmcgb2YgdGhlIGdpdmVuIGV4cHJlc3Npb24uCgogICAgUGFyYW1ldGVyczoKICAgICAtIGV4cHIgLSBleHByZXNzaW9uIHRoYXQgbXVzdCBtYXRjaCB6ZXJvIG9yIG1vcmUgdGltZXMKICAgICAtIGRlZmF1bHQgKG9wdGlvbmFsKSAtIHZhbHVlIHRvIGJlIHJldHVybmVkIGlmIHRoZSBvcHRpb25hbCBleHByZXNzaW9uIGlzIG5vdCBmb3VuZC4KCiAgICBFeGFtcGxlOjoKICAgICAgICAjIFVTIHBvc3RhbCBjb2RlIGNhbiBiZSBhIDUtZGlnaXQgemlwLCBwbHVzIG9wdGlvbmFsIDQtZGlnaXQgcXVhbGlmaWVyCiAgICAgICAgemlwID0gQ29tYmluZShXb3JkKG51bXMsIGV4YWN0PTUpICsgT3B0aW9uYWwoJy0nICsgV29yZChudW1zLCBleGFjdD00KSkpCiAgICAgICAgemlwLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIHRyYWRpdGlvbmFsIFpJUCBjb2RlCiAgICAgICAgICAgIDEyMzQ1CiAgICAgICAgICAgIAogICAgICAgICAgICAjIFpJUCs0IGZvcm0KICAgICAgICAgICAgMTIxMDEtMDAwMQogICAgICAgICAgICAKICAgICAgICAgICAgIyBpbnZhbGlkIFpJUAogICAgICAgICAgICA5ODc2NS0KICAgICAgICAgICAgJycnKQogICAgcHJpbnRzOjoKICAgICAgICAjIHRyYWRpdGlvbmFsIFpJUCBjb2RlCiAgICAgICAgMTIzNDUKICAgICAgICBbJzEyMzQ1J10KCiAgICAgICAgIyBaSVArNCBmb3JtCiAgICAgICAgMTIxMDEtMDAwMQogICAgICAgIFsnMTIxMDEtMDAwMSddCgogICAgICAgICMgaW52YWxpZCBaSVAKICAgICAgICA5ODc2NS0KICAgICAgICAgICAgIF4KICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciA1KSwgKGxpbmU6MSwgY29sOjYpCiAgICBjAwAAAAAAAAADAAAABAAAAAMAAABzLgAAAHQAdAF8AIMCagJ8AWQBZAKNAgEAfABqA2oEfABfBHwCfABfBWQDfABfBmQAUwApBE5GKQFyjQEAAFQpB3IaAgAAchsAAABypgAAAHJQAQAAcn0BAAByCQEAAHKBAQAAKQNypAAAAHJQAQAAcgMBAAApAXJsAQAAcncAAAByeAAAAHKmAAAAdA8AAHMIAAAAAAEUAQoBBgF6EU9wdGlvbmFsLl9faW5pdF9fVGMEAAAAAAAAAAUAAAAMAAAAQwAAAHN6AAAAeRx8AGoAagF8AXwCfANkAWQCjQRcAn0CfQRXAG5UBAB0AnQDZgJrCnJwAQABAAEAfABqBHQFawlyaHwAagBqBnJedAd8AGoEZwGDAX0EfABqBHwEfABqAGoGPABxbHwAagRnAX0EbgRnAH0EWQBuAlgAfAJ8BGYCUwApA05GKQFymQEAACkIclABAABynQEAAHIfAAAActwAAAByCQEAANoTX29wdGlvbmFsTm90TWF0Y2hlZHJ8AQAAciIAAAApBXKkAAAAck8BAABynwAAAHKYAQAAcrcBAABydwAAAHJ3AAAAcngAAABysQEAAHoPAABzFAAAAAABAgEcARIBCgEIAQwBEAIKAgoBehJPcHRpb25hbC5wYXJzZUltcGxjAQAAAAAAAAABAAAAAwAAAEMAAABzNAAAAHQAfABkAYMCchB8AGoBUwB8AGoCZABrCHIuZAJ0A3wAagSDARcAZAMXAHwAXwJ8AGoCUwApBE5yygAAAHIcAQAAch0BAAApBXL5AAAAcsoAAAByewEAAHKFAAAAclABAAApAXKkAAAAcncAAABydwAAAHJ4AAAAcq4AAACIDwAAcwoAAAAAAQoBBgIKARQCehBPcHRpb25hbC5fX3N0cl9fKQFUKQlylgAAAHKXAAAAcpgAAAByugAAAHK/AgAAcqYAAABysQEAAHKuAAAAcjQCAABydwAAAHJ3AAAAKQFybAEAAHJ4AAAAchsAAABRDwAAcwgAAAAIIgQBEAYKDmMAAAAAAAAAAAAAAAAEAAAAAAAAAHMsAAAAZQBaAWQAWgJkAVoDZAmHAGYBZARkBYQJWgRkCmQHZAiEAVoFhwAEAFoGUwApC3IoAAAAYf8JAAAKICAgIFRva2VuIGZvciBza2lwcGluZyBvdmVyIGFsbCB1bmRlZmluZWQgdGV4dCB1bnRpbCB0aGUgbWF0Y2hlZCBleHByZXNzaW9uIGlzIGZvdW5kLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gdGFyZ2V0IGV4cHJlc3Npb24gbWFya2luZyB0aGUgZW5kIG9mIHRoZSBkYXRhIHRvIGJlIHNraXBwZWQKICAgICAtIGluY2x1ZGUgLSAoZGVmYXVsdD1De0ZhbHNlfSkgaWYgVHJ1ZSwgdGhlIHRhcmdldCBleHByZXNzaW9uIGlzIGFsc28gcGFyc2VkIAogICAgICAgICAgKHRoZSBza2lwcGVkIHRleHQgYW5kIHRhcmdldCBleHByZXNzaW9uIGFyZSByZXR1cm5lZCBhcyBhIDItZWxlbWVudCBsaXN0KS4KICAgICAtIGlnbm9yZSAtIChkZWZhdWx0PUN7Tm9uZX0pIHVzZWQgdG8gZGVmaW5lIGdyYW1tYXJzICh0eXBpY2FsbHkgcXVvdGVkIHN0cmluZ3MgYW5kIAogICAgICAgICAgY29tbWVudHMpIHRoYXQgbWlnaHQgY29udGFpbiBmYWxzZSBtYXRjaGVzIHRvIHRoZSB0YXJnZXQgZXhwcmVzc2lvbgogICAgIC0gZmFpbE9uIC0gKGRlZmF1bHQ9Q3tOb25lfSkgZGVmaW5lIGV4cHJlc3Npb25zIHRoYXQgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIAogICAgICAgICAgaW5jbHVkZWQgaW4gdGhlIHNraXBwZWQgdGVzdDsgaWYgZm91bmQgYmVmb3JlIHRoZSB0YXJnZXQgZXhwcmVzc2lvbiBpcyBmb3VuZCwgCiAgICAgICAgICB0aGUgU2tpcFRvIGlzIG5vdCBhIG1hdGNoCgogICAgRXhhbXBsZTo6CiAgICAgICAgcmVwb3J0ID0gJycnCiAgICAgICAgICAgIE91dHN0YW5kaW5nIElzc3VlcyBSZXBvcnQgLSAxIEphbiAyMDAwCgogICAgICAgICAgICAgICAjIHwgU2V2ZXJpdHkgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEYXlzIE9wZW4KICAgICAgICAgICAgLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tCiAgICAgICAgICAgICAxMDEgfCBDcml0aWNhbCB8IEludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2ggICAgICAgICAgICAgICAgIHwgICAgICAgICAgNgogICAgICAgICAgICAgIDk0IHwgQ29zbWV0aWMgfCBTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykgICAgICAgICB8ICAgICAgICAgMTQKICAgICAgICAgICAgICA3OSB8IE1pbm9yICAgIHwgU3lzdGVtIHNsb3cgd2hlbiBydW5uaW5nIHRvbyBtYW55IHJlcG9ydHMgfCAgICAgICAgIDQ3CiAgICAgICAgICAgICcnJwogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgU0VQID0gU3VwcHJlc3MoJ3wnKQogICAgICAgICMgdXNlIFNraXBUbyB0byBzaW1wbHkgbWF0Y2ggZXZlcnl0aGluZyB1cCB1bnRpbCB0aGUgbmV4dCBTRVAKICAgICAgICAjIC0gaWdub3JlIHF1b3RlZCBzdHJpbmdzLCBzbyB0aGF0IGEgJ3wnIGNoYXJhY3RlciBpbnNpZGUgYSBxdW90ZWQgc3RyaW5nIGRvZXMgbm90IG1hdGNoCiAgICAgICAgIyAtIHBhcnNlIGFjdGlvbiB3aWxsIGNhbGwgdG9rZW4uc3RyaXAoKSBmb3IgZWFjaCBtYXRjaGVkIHRva2VuLCBpLmUuLCB0aGUgZGVzY3JpcHRpb24gYm9keQogICAgICAgIHN0cmluZ19kYXRhID0gU2tpcFRvKFNFUCwgaWdub3JlPXF1b3RlZFN0cmluZykKICAgICAgICBzdHJpbmdfZGF0YS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIuc3RyaXApKQogICAgICAgIHRpY2tldF9leHByID0gKGludGVnZXIoImlzc3VlX251bSIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgic2V2IikgKyBTRVAgCiAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZ19kYXRhKCJkZXNjIikgKyBTRVAgCiAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIoImRheXNfb3BlbiIpKQogICAgICAgIAogICAgICAgIGZvciB0a3QgaW4gdGlja2V0X2V4cHIuc2VhcmNoU3RyaW5nKHJlcG9ydCk6CiAgICAgICAgICAgIHByaW50IHRrdC5kdW1wKCkKICAgIHByaW50czo6CiAgICAgICAgWycxMDEnLCAnQ3JpdGljYWwnLCAnSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaCcsICc2J10KICAgICAgICAtIGRheXNfb3BlbjogNgogICAgICAgIC0gZGVzYzogSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaAogICAgICAgIC0gaXNzdWVfbnVtOiAxMDEKICAgICAgICAtIHNldjogQ3JpdGljYWwKICAgICAgICBbJzk0JywgJ0Nvc21ldGljJywgIlNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKSIsICcxNCddCiAgICAgICAgLSBkYXlzX29wZW46IDE0CiAgICAgICAgLSBkZXNjOiBTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykKICAgICAgICAtIGlzc3VlX251bTogOTQKICAgICAgICAtIHNldjogQ29zbWV0aWMKICAgICAgICBbJzc5JywgJ01pbm9yJywgJ1N5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzJywgJzQ3J10KICAgICAgICAtIGRheXNfb3BlbjogNDcKICAgICAgICAtIGRlc2M6IFN5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzCiAgICAgICAgLSBpc3N1ZV9udW06IDc5CiAgICAgICAgLSBzZXY6IE1pbm9yCiAgICBGTmMFAAAAAAAAAAUAAAADAAAAAwAAAHNgAAAAdAB0AXwAgwJqAnwBgwEBAHwDfABf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ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogbGlnaHQgYmx1ZSB0ZXh0dXJlOiBidXJsYXAiCiAgICAgICAgYXR0cl9leHByID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIAogICAgICAgICMgcHJpbnQgYXR0cmlidXRlcyBhcyBwbGFpbiBncm91cHMKICAgICAgICBwcmludChPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5kdW1wKCkpCiAgICAgICAgCiAgICAgICAgIyBpbnN0ZWFkIG9mIE9uZU9yTW9yZShleHByKSwgcGFyc2UgdXNpbmcgRGljdChPbmVPck1vcmUoR3JvdXAoZXhwcikpKSAtIERpY3Qgd2lsbCBhdXRvLWFzc2lnbiBuYW1lcwogICAgICAgIHJlc3VsdCA9IERpY3QoT25lT3JNb3JlKEdyb3VwKGF0dHJfZXhwcikpKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCiAgICAgICAgCiAgICAgICAgIyBhY2Nlc3MgbmFtZWQgZmllbGRzIGFzIGRpY3QgZW50cmllcywgb3Igb3V0cHV0IGFzIGRpY3QKICAgICAgICBwcmludChyZXN1bHRbJ3NoYXBlJ10pICAgICAgICAKICAgICAgICBwcmludChyZXN1bHQuYXNEaWN0KCkpCiAgICBwcmludHM6OgogICAgICAgIFsnc2hhcGUnLCAnU1FVQVJFJywgJ3Bvc24nLCAndXBwZXIgbGVmdCcsICdjb2xvcicsICdsaWdodCBibHVlJywgJ3RleHR1cmUnLCAnYnVybGFwJ10KCiAgICAgICAgW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsncG9zbicsICd1cHBlciBsZWZ0J10sIFsnY29sb3InLCAnbGlnaHQgYmx1ZSddLCBbJ3RleHR1cmUnLCAnYnVybGFwJ11dCiAgICAgICAgLSBjb2xvcjogbGlnaHQgYmx1ZQogICAgICAgIC0g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ICAgIAogICAgV2hlbiB0aGUgcGFyc2UgYWN0aW9uIGlzIGNhbGxlZCwgdGhpcyBkZWNvcmF0b3Igd2lsbCBwcmludCBDeyI+PiBlbnRlcmluZyBJe21ldGhvZC1uYW1lfShsaW5lOkl7Y3VycmVudF9zb3VyY2VfbGluZX0sIEl7cGFyc2VfbG9jYXRpb259LCBJe21hdGNoZWRfdG9rZW5zfSkiLn0KICAgIFdoZW4gdGhlIHBhcnNlIGFjdGlvbiBjb21wbGV0ZXMsIHRoZSBkZWNvcmF0b3Igd2lsbCBwcmludCBDeyI8PCJ9IGZvbGxvd2VkIGJ5IHRoZSByZXR1cm5lZCB2YWx1ZSwgb3IgYW55IGV4Y2VwdGlvbiB0aGF0IHRoZSBwYXJzZSBhY3Rpb24gcmFpc2VkLgoKICAgIEV4YW1wbGU6OgogICAgICAgIHdkID0gV29yZChhbHBoYXMpCgogICAgICAgIEB0cmFjZVBhcnNlQWN0aW9uCiAgICAgICAgZGVmIHJlbW92ZV9kdXBsaWNhdGVfY2hhcnModG9rZW5zKToKICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4oc29ydGVkKHNldCgnJy5qb2luKHRva2VucykpKQoKICAgICAgICB3ZHMgPSBPbmVPck1vcmUod2QpLnNldFBhcnNlQWN0aW9uKHJlbW92ZV9kdXBsaWNhdGVfY2hhcnMpCiAgICAgICAgcHJpbnQod2RzLnBhcnNlU3RyaW5nKCJzbGtkanMgc2xkIHNsZGQgc2RsZiBzZGxqZiIpKQogICAgcHJpbnRzOjoKICAgICAgICA+PmVudGVyaW5nIHJlbW92ZV9kdXBsaWNhdGVfY2hhcnMobGluZTogJ3Nsa2RqcyBzbGQgc2xkZCBzZGxmIHNkbGpmJywgMCwgKFsnc2xrZGpzJywgJ3NsZCcsICdzbGRkJywgJ3NkbGYnLCAnc2RsamYnXSwge30pKQogICAgICAgIDw8bGVhdmluZyByZW1vdmVfZHVwbGljYXRlX2NoYXJzIChyZXQ6ICdkZmprbHMnKQogICAgICAgIFsnZGZqa2xzJ10KICAgIGMAAAAAAAAAAAcAAAASAAAAFwAAAHO0AAAAiABqAH0BfABkB2QAhQIZAFwDfQJ9A30EdAF8AIMBZAFrBHI4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bWFrZXMgc3VyZSB0byBkbwogICAgbG9uZ2VzdC1maXJzdCB0ZXN0aW5nIHdoZW4gdGhlcmUgaXMgYSBjb25mbGljdCwgcmVnYXJkbGVzcyBvZiB0aGUgaW5wdXQgb3JkZXIsCiAgICBidXQgcmV0dXJucyBhIEN7THtNYXRjaEZpcnN0fX0gZm9yIGJlc3QgcGVyZm9ybWFuY2UuCgogICAgUGFyYW1ldGVyczoKICAgICAtIHN0cnMgLSBhIHN0cmluZyBvZiBzcGFjZS1kZWxpbWl0ZWQgbGl0ZXJhbHMsIG9yIGEgY29sbGVjdGlvbiBvZiBzdHJpbmcgbGl0ZXJhbHMKICAgICAtIGNhc2VsZXNzIC0gKGRlZmF1bHQ9Q3tGYWxzZX0pIC0gdHJlYXQgYWxsIGxpdGVyYWxzIGFzIGNhc2VsZXNzCiAgICAgLSB1c2VSZWdleCAtIChkZWZhdWx0PUN7VHJ1ZX0pIC0gYXMgYW4gb3B0aW1pemF0aW9uLCB3aWxsIGdlbmVyYXRlIGEgUmVnZXgKICAgICAgICAgIG9iamVjdDsgb3RoZXJ3aXNlLCB3aWxsIGdlbmVyYXRlIGEgQ3tNYXRjaEZpcnN0fSBvYmplY3QgKGlmIEN7Y2FzZWxlc3M9VHJ1ZX0sIG9yCiAgICAgICAgICBpZiBjcmVhdGluZyBhIEN7UmVnZXh9IHJhaXNlcyBhbiBleGNlcHRpb24pCgogICAgRXhhbXBsZTo6CiAgICAgICAgY29tcF9vcGVyID0gb25lT2YoIjwgPSA+IDw9ID49ICE9IikKICAgICAgICB2YXIgPSBXb3JkKGFscGhhcykKICAgICAgICBudW1iZXIgPSBXb3JkKG51bXMpCiAgICAgICAgdGVybSA9IHZhciB8IG51bWJlcgogICAgICAgIGNvbXBhcmlzb25fZXhwciA9IHRlcm0gKyBjb21wX29wZXIgKyB0ZXJtCiAgICAgICAgcHJpbnQoY29tcGFyaXNvbl9leHByLnNlYXJjaFN0cmluZygiQiA9IDEyICBBQT0yMyBCPD1BQSBBQT4xMiIpKQogICAgcHJpbnRzOjoKICAgICAgICBbWydCJywgJz0nLCAnMTInXSwgWydBQScsICc9JywgJzIzJ10sIFsnQicsICc8PScsICdBQSddLCBb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bHVlIHRleHR1cmU6IGJ1cmxhcCIKICAgICAgICBhdHRyX2V4cHIgPSAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCiAgICAgICAgcHJpbnQoT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkuZHVtcCgpKQogICAgICAgIAogICAgICAgIGF0dHJfbGFiZWwgPSBsYWJlbAogICAgICAgIGF0dHJfdmFsdWUgPSBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikKCiAgICAgICAgIyBzaW1pbGFyIHRvIERpY3QsIGJ1dCBzaW1wbGVyIGNhbGwgZm9ybWF0CiAgICAgICAgcmVzdWx0ID0gZGljdE9mKGF0dHJfbGFiZWwsIGF0dHJfdmFsdWUpLnBhcnNlU3RyaW5nKHRleHQpCiAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKICAgICAgICBwcmludChyZXN1bHRbJ3NoYXBlJ10pCiAgICAgICAgcHJpbnQocmVzdWx0LnNoYXBlKSAgIyBvYmplY3QgYXR0cmlidXRlIGFjY2VzcyB3b3JrcyB0b28KICAgICAgICBwcmludChyZXN1bHQuYXNEaWN0KCkpCiAgICBwcmludHM6OgogICAgICAgIFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIgbGVmdCddLCBbJ2NvbG9yJywgJ2xpZ2h0IGJsdWUnXSwgWyd0ZXh0dXJlJywgJ2J1cmxhcCddXQogICAgICAgIC0gY29sb3I6IGxpZ2h0IGJsdWUKICAgICAgICAtIHBvc246IHVwcGVyIGxlZnQKICAgICAgICAtIHNoYXBlOiBTUVVBUkUKICAgICAgICAtIHRleHR1cmU6IGJ1cmxhcAogICAgICAgIFNRVUFSRQogICAgICAgIFNRVUFSRQogICAgICAgIHsnY29sb3InOiAnbGlnaHQgYmx1ZScsICdzaGFwZSc6ICdTUVVBUkUnLCAncG9z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iAGDAX0DWQBuAlgAfAN8Al8BfAJTACkFYUcFAAAKICAgIEhlbHBlciB0byBkZWZpbmUgYSBwYXJzZSBhY3Rpb24gYnkgbWFwcGluZyBhIGZ1bmN0aW9uIHRvIGFsbCBlbGVtZW50cyBvZiBhIFBhcnNlUmVzdWx0cyBsaXN0LklmIGFueSBhZGRpdGlvbmFsIAogICAgYXJncyBhcmUgcGFzc2VkLCB0aGV5IGFyZSBmb3J3YXJkZWQgdG8gdGhlIGdpdmVuIGZ1bmN0aW9uIGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFmdGVyCiAgICB0aGUgdG9rZW4sIGFzIGluIEN7aGV4X2ludGVnZXIgPSBXb3JkKGhleG51bXMpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKGludCwgMTYpKX0sIHdoaWNoIHdpbGwgY29udmVydCB0aGUKICAgIHBhcnNlZCBkYXRhIHRvIGFuIGludGVnZXIgdXNpbmcgYmFzZSAxNi4KCiAgICBFeGFtcGxlIChjb21wYXJlIHRoZSBsYXN0IHRvIGV4YW1wbGUgaW4gTHtQYXJzZXJFbGVtZW50LnRyYW5zZm9ybVN0cmluZ306OgogICAgICAgIGhleF9pbnRzID0gT25lT3JNb3JlKFdvcmQoaGV4bnVtcykpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKGludCwgMTYpKQogICAgICAgIGhleF9pbnRzLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAwMCAxMSAyMiBhYSBGRiAwYSAwZCAxYQogICAgICAgICAgICAnJycpCiAgICAgICAgCiAgICAgICAgdXBwZXJ3b3JkID0gV29yZChhbHBoYXMpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci51cHBlcikpCiAgICAgICAgT25lT3JNb3JlKHVwcGVyd29yZCkucnVuVGVzdHMoJycnCiAgICAgICAgICAgIG15IGtpbmdkb20gZm9yIGEgaG9yc2UKICAgICAgICAgICAgJycnKQoKICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIudGl0bGUpKQogICAgICAgIE9uZU9yTW9yZSh3ZCkuc2V0UGFyc2VB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ICAgIEhlbHBlciB0byBjcmVhdGUgYSB2YWxpZGF0aW5nIHBhcnNlIGFjdGlvbiB0byBiZSB1c2VkIHdpdGggc3RhcnQgdGFncyBjcmVhdGVkCiAgICB3aXRoIEN7THttYWtlWE1MVGFnc319IG9yIEN7THttYWtlSFRNTFRhZ3N9fS4gVXNlIEN7d2l0aEF0dHJpYnV0ZX0gdG8gcXVhbGlmeSBhIHN0YXJ0aW5nIHRhZwogICAgd2l0aCBhIHJlcXVpcmVkIGF0dHJpYnV0ZSB2YWx1ZSwgdG8gYXZvaWQgZmFsc2UgbWF0Y2hlcyBvbiBjb21tb24gdGFncyBzdWNoIGFzCiAgICBDezxURD59IG9yIEN7PERJVj59LgoKICAgIENhbGwgQ3t3aXRoQXR0cmlidXRlfSB3aXRoIGEgc2VyaWVzIG9mIGF0dHJpYnV0ZSBuYW1lcyBhbmQgdmFsdWVzLiBTcGVjaWZ5IHRoZSBsaXN0CiAgICBvZiBmaWx0ZXIgYXR0cmlidXRlcyBuYW1lcyBhbmQgdmFsdWVzIGFzOgogICAgIC0ga2V5d29yZCBhcmd1bWVudHMsIGFzIGluIEN7KGFsaWduPSJyaWdodCIpfSwgb3IKICAgICAtIGFzIGFuIGV4cGxpY2l0IGRpY3Qgd2l0aCBDeyoqfSBvcGVyYXRvciwgd2hlbiBhbiBhdHRyaWJ1dGUgbmFtZSBpcyBhbHNvIGEgUHl0aG9uCiAgICAgICAgICByZXNlcnZlZCB3b3JkLCBhcyBpbiBDeyoqeyJjbGFzcyI6IkN1c3RvbWVyIiwgImFsaWduIjoicmlnaHQifX0KICAgICAtIGEgbGlzdCBvZiBuYW1lLXZhbHVlIHR1cGxlcywgYXMgaW4gKCAoIm5zMTpjbGFzcyIsICJDdXN0b21lciIpLCAoIm5zMjphbGlnbiIsInJpZ2h0IikgKQogICAgRm9yIGF0dHJpYnV0ZSBuYW1lcyB3aXRoIGEgbmFtZXNwYWNlIHByZWZpeCwgeW91IG11c3QgdXNlIHRoZSBzZWNvbmQgZm9ybS4gIEF0dHJpYnV0ZQogICAgbmFtZXMgYXJlIG1hdGNoZWQgaW5zZW5zaXRpdmUgdG8gdXBwZXIvbG93ZXIgY2FzZS4KICAgICAgIAogICAgSWYganVzdCB0ZXN0aW5nIGZvciBDe2NsYXNzfSAod2l0aCBvciB3aXRob3V0IGEgbmFtZXNwYWNlKSwgdXNlIEN7THt3aXRoQ2xhc3N9fS4KCiAgICBUbyB2ZXJpZnkgdGhhdCB0aGUgYXR0cmlidXRlIGV4aXN0cywgYnV0IHdpdGhvdXQgc3BlY2lmeWluZyBhIHZhbHVlLCBwYXNzCiAgICBDe3dpdGhBdHRyaWJ1dGUuQU5ZX1ZBTFVFfSBhcyB0aGUgdmFsdWUuCgogICAgRXhhbXBsZTo6CiAgICAgICAgaHRtbCA9ICcnJwogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICBTb21lIHRleHQKICAgICAgICAgICAgPGRpdiB0eXBlPSJncmlkIj4xIDQgMCAxIDA8L2Rpdj4KICAgICAgICAgICAgPGRpdiB0eXBlPSJncmFwaCI+MSwzIDIsMyAxLDE8L2Rpdj4KICAgICAgICAgICAgPGRpdj50aGlzIGhhcyBubyB0eXBlPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgJycnCiAgICAgICAgZGl2LGRpdl9lbmQgPSBtYWtlSFRNTFRhZ3MoImRpdiIpCgogICAgICAgICMgb25seSBtYXRjaCBkaXYgdGFnIGhhdmluZyBhIHR5cGUgYXR0cmlidXRlIHdpdGggdmFsdWUgImdyaWQiCiAgICAgICAgZGl2X2dyaWQgPSBkaXYoKS5zZXRQYXJzZUFjdGlvbih3aXRoQXR0cmlidXRlKHR5cGU9ImdyaWQiKSkKICAgICAgICBncmlkX2V4cHIgPSBkaXZfZ3JpZCArIFNraXBUbyhkaXYgfCBkaXZfZW5kKSgiYm9keSIpCiAgICAgICAgZm9yIGdyaWRfaGVhZGVyIGluIGdyaWRfZXhwci5zZWFyY2hTdHJpbmcoaHRtbCk6CiAgICAgICAgICAgIHByaW50KGdyaWRfaGVhZGVyLmJvZHkpCiAgICAgICAgCiAgICAgICAgIyBjb25zdHJ1Y3QgYSBtYXRjaCB3aXRoIGFueSBkaXYgdGFnIGhhdmluZyBhIHR5cGUgYXR0cmlidXRlLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZQogICAgICAgIGRpdl9hbnlfdHlwZSA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhBdHRyaWJ1dGUodHlwZT13aXRoQXR0cmlidXRlLkFOWV9WQUxVRSkpCiAgICAgICAgZGl2X2V4cHIgPSBkaXZfYW55X3R5cGUgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBkaXZfaGVhZGVyIGluIGRpdl9leHByLnNlYXJjaFN0cmluZyhodG1sKToKICAgICAgICAgICAgcHJpbnQoZGl2X2hlYWRlci5ib2R5KQogICAgcHJpbnRzOjoKICAgICAgICAxIDQgMCAxIDAKCiAgICAgICAgMSA0IDAgMSAwCiAgICAgICAgMSwzIDIsMyAxLDEKICAgIE5jAQAAAAAAAAADAAAABAAAAFMAAABzGAAAAGcAfABdEFwCfQF9AnwBfAJmApECcQRTAHJ3AAAAcncAAAApA3KGAAAAcuIAAABy3QAAAHJ3AAAAcncAAAByeAAAAHLeAAAAURMAAHMCAAAABgB6IXdpdGhBdHRyaWJ1dGUuPGxvY2Fscz4uPGxpc3Rjb21wPmMDAAAAAAAAAAUAAAAIAAAAEwAAAHNeAAAAeFiIAEQAXVBcAn0DfQR8A3wCawdyJnQAfAB8AWQBfAMXAIMDggF8BHQBagJrA3IGfAJ8AxkAfARrA3IGdAB8AHwBZAJ8A3wCfAMZAHwEZgMWAIMDggFxBlcAZABTACkDTnoWbm8gbWF0Y2hpbmcgYXR0cmlidXRlIHorYXR0cmlidXRlICclcycgaGFzIHZhbHVlICclcycsIG11c3QgYmUgJyVzJykDch8AAAByZQAAANoJQU5ZX1ZBTFVFKQVyiwAAAHJYAQAAcrcBAADaCGF0dHJOYW1l2glhdHRyVmFsdWUpAdoFYXR0cnNydwAAAHJ4AAAAcqcBAABSEwAAcwwAAAAAAQ4BCAEQARYBCAF6GXdpdGhBdHRyaWJ1dGUuPGxvY2Fscz4ucGEpAXLpAAAAKQNyowAAANoIYXR0ckRpY3RypwEAAHJ3AAAAKQFyKAMAAHJ4AAAAcmUAAAAbEwAAcwwAAAAAMgQBDgIIAQ4BDAdjAgAAAAAAAAADAAAABAAAAEMAAABzHgAAAHwBcgxkAXwBFgBuAmQCfQJ0AGYAfAJ8AGkBjgFTACkDYeMDAAAKICAgIFNpbXBsaWZpZWQgdmVyc2lvbiBvZiBDe0x7d2l0aEF0dHJpYnV0ZX19IHdoZW4gbWF0Y2hpbmcgb24gYSBkaXYgY2xhc3MgLSBtYWRlCiAgICBkaWZmaWN1bHQgYmVjYXVzZSBDe2NsYXNzfSBpcyBhIHJlc2VydmVkIHdvcmQgaW4gUHl0aG9uLgoKICAgIEV4YW1wbGU6OgogICAgICAgIGh0bWwgPSAnJycKICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgU29tZSB0ZXh0CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQiPjEgNCAwIDEgMDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJncmFwaCI+MSwzIDIsMyAxLDE8L2Rpdj4KICAgICAgICAgICAgPGRpdj50aGlzICZsdDtkaXYmZ3Q7IGhhcyBubyBjbGFzczwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICcnJwogICAgICAgIGRpdixkaXZfZW5kID0gbWFrZUhUTUxUYWdzKCJkaXYiKQogICAgICAgIGRpdl9ncmlkID0gZGl2KCkuc2V0UGFyc2VBY3Rpb24od2l0aENsYXNzKCJncmlkIikpCiAgICAgICAgCiAgICAgICAgZ3JpZF9leHByID0gZGl2X2dyaWQgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBncmlkX2hlYWRlciBpbiBncmlkX2V4cHIuc2VhcmNoU3RyaW5nKGh0bWwpOgogICAgICAgICAgICBwcmludChncmlkX2hlYWRlci5ib2R5KQogICAgICAgIAogICAgICAgIGRpdl9hbnlfdHlwZSA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhDbGFzcyh3aXRoQXR0cmlidXRlLkFOWV9WQUxVRSkpCiAgICAgICAgZGl2X2V4cHIgPSBkaXZfYW55X3R5cGUgKyBTa2lwVG8oZGl2IHwgZGl2X2VuZCkoImJvZHkiKQogICAgICAgIGZvciBkaXZfaGVhZGVyIGluIGRpdl9leHByLnNlYXJjaFN0cmluZyhodG1sKToKICAgICAgICAgICAgcHJpbnQoZGl2X2hlYWRlci5ib2R5KQogICAgcHJpbnRzOjoKICAgICAgICAxIDQgMCAxIDAKCiAgICAgICAgMSA0IDAgMSAwCiAgICAgICAgMSwzIDIsMyAxLDEKICAgIHoIJXM6Y2xhc3PaBWNsYXNzKQFyZQAAACkD2gljbGFzc25hbWXaCW5hbWVzcGFjZdoJY2xhc3NhdHRycncAAABydwAAAHJ4AAAAcmsAAABcEwAAcwQAAAAAIBAB+gEocmoCAABjBAAAAAAAAAARAAAABwAAAEMAAABzhgIAAHQAgwB9BHwAfAJ8BBcAfAMXAEIAfQWQAnhgdAF8AYMBRACQAl1SXAJ9Bn0HfAdkCxcAZAFkAoUCGQBcBH0IfQl9Cn0LfAlkA2sAclRkBHwIFgBuBmQFfAgWAH0MfAlkA2sCcoh8CGQBawhzeHQCfAiDAWQGawNygHQDZAeDAYIBfAhcAn0NfQ50AIMAagR8DIMBfQ98CnQFagZrApABcmR8CWQIawJyxnQHfAV8CBcAgwF0CHwFdAl8CIMBFwCDARcAfRBunHwJZAZrApABch58CGQBawmQAXIAdAd8BXwIFwB8BRcAgwF0CHwFdAl8CHwFFwCDARcAgwEXAH0Qbhx0B3wFfAUXAIMBdAh8BXQJfAWDARcAgwEXAH0QbkR8CWQDawKQAXJadAd8BXwNFwB8BRcAfA4XAHwFFwCDAXQIfAV8DRcAfAUXAHwOFwB8BRcAgwEXAH0Qbgh0A2QJgwGCAW7sfAp0BWoKawKQAnJIfAlkCGsCkAFyqnQLfAh0DIMCkAFzjnQMfAiDAX0IdAd8CGoNfA8XAIMBdAh8CHwPFwCDARcAfRBunHwJZAZrApACcgJ8CGQBawmQAXLkdAd8BXwIFwB8DxcAgwF0CHwFdAl8CHwPFwCDARcAgwEXAH0Qbhx0B3wFfA8XAIMBdAh8BXQJfA+DARcAgwEXAH0QbkR8CWQDawKQAnI+dAd8BXwNFwB8DxcAfA4XAHwPFwCDAXQIfAV8DRcAfA8XAHwOFwB8DxcAgwEXAH0Qbgh0A2QJgwGCAW4IdANkCoMBggF8C5ACcmB8EGoOfAuDAQEAfA98EGoEfAyDAXwFQgBLAH0PfA99BXEiVwB8BHwFSwB9BHwEUwApDGGcCQAACiAgICBIZWxwZXIgbWV0aG9kIGZvciBjb25zdHJ1Y3RpbmcgZ3JhbW1hcnMgb2YgZXhwcmVzc2lvbnMgbWFkZSB1cCBvZgogICAgb3BlcmF0b3JzIHdvcmtpbmcgaW4gYSBwcmVjZWRlbmNlIGhpZXJhcmNoeS4gIE9wZXJhdG9ycyBtYXkgYmUgdW5hcnkgb3IKICAgIGJpbmFyeSwgbGVmdC0gb3IgcmlnaHQtYXNzb2NpYXRpdmUuICBQYXJzZSBhY3Rpb25zIGNhbiBhbHNvIGJlIGF0dGFjaGVkCiAgICB0byBvcGVyYXRvciBleHByZXNzaW9ucy4gVGhlIGdlbmVyYXRlZCBwYXJzZXIgd2lsbCBhbHNvIHJlY29nbml6ZSB0aGUgdXNlIAogICAgb2YgcGFyZW50aGVzZXMgdG8gb3ZlcnJpZGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMgKHNlZSBleGFtcGxlIGJlbG93KS4KICAgIAogICAgTm90ZTogaWYgeW91IGRlZmluZSBhIGRlZXAgb3BlcmF0b3IgbGlzdCwgeW91IG1heSBzZWUgcGVyZm9ybWFuY2UgaXNzdWVzCiAgICB3aGVuIHVzaW5nIGluZml4Tm90YXRpb24uIFNlZSBMe1BhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdH0gZm9yIGEKICAgIG1lY2hhbmlzbSB0byBwb3RlbnRpYWxseSBpbXByb3ZlIHlvdXIgcGFyc2VyIHBlcmZvcm1hbmNlLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBiYXNlRXhwciAtIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBtb3N0IGJhc2ljIGVsZW1lbnQgZm9yIHRoZSBuZXN0ZWQKICAgICAtIG9wTGlzdCAtIGxpc3Qgb2YgdHVwbGVzLCBvbmUgZm9yIGVhY2ggb3BlcmF0b3IgcHJlY2VkZW5jZSBsZXZlbCBpbiB0aGUKICAgICAgZXhwcmVzc2lvbiBncmFtbWFyOyBlYWNoIHR1cGxlIGlzIG9mIHRoZSBmb3JtCiAgICAgIChvcEV4cHIsIG51bVRlcm1zLCByaWdodExlZnRBc3NvYywgcGFyc2VBY3Rpb24pLCB3aGVyZToKICAgICAgIC0gb3BFeHByIGlzIHRoZSBweXBhcnNpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9wZXJhdG9yOwogICAgICAgICAgbWF5IGFsc28gYmUgYSBzdHJpbmcsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgTGl0ZXJhbDsKICAgICAgICAgIGlmIG51bVRlcm1zIGlzIDMsIG9wRXhwciBpcyBhIHR1cGxlIG9mIHR3byBleHByZXNzaW9ucywgZm9yIHRoZQogICAgICAgICAgdHdvIG9wZXJhdG9ycyBzZXBhcmF0aW5nIHRoZSAzIHRlcm1zCiAgICAgICAtIG51bVRlcm1zIGlzIHRoZSBudW1iZXIgb2YgdGVybXMgZm9yIHRoaXMgb3BlcmF0b3IgKG11c3QKICAgICAgICAgIGJlIDEsIDIsIG9yIDMpCiAgICAgICAtIHJpZ2h0TGVmdEFzc29jIGlzIHRoZSBpbmRpY2F0b3Igd2hldGhlciB0aGUgb3BlcmF0b3IgaXMKICAgICAgICAgIHJpZ2h0IG9yIGxlZnQgYXNzb2NpYXRpdmUsIHVzaW5nIHRoZSBweXBhcnNpbmctZGVmaW5lZAogICAgICAgICAgY29uc3RhbnRzIEN7b3BBc3NvYy5SSUdIVH0gYW5kIEN7b3BBc3NvYy5MRUZUfS4KICAgICAgIC0gcGFyc2VBY3Rpb24gaXMgdGhlIHBhcnNlIGFjdGlvbiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgIGV4cHJlc3Npb25zIG1hdGNoaW5nIHRoaXMgb3BlcmF0b3IgZXhwcmVzc2lvbiAodGhlCiAgICAgICAgICBwYXJzZSBhY3Rpb24gdHVwbGUgbWVtYmVyIG1heSBiZSBvbWl0dGVkKQogICAgIC0gbHBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIGxlZnQtcGFyZW50aGVzZXMgKGRlZmF1bHQ9Q3tTdXBwcmVzcygnKCcpfSkKICAgICAtIHJwYXIgLSBleHByZXNzaW9uIGZvciBtYXRjaGluZyByaWdodC1wYXJlbnRoZXNlcyAoZGVmYXVsdD1De1N1cHByZXNzKCcpJyl9KQoKICAgIEV4YW1wbGU6OgogICAgICAgICMgc2ltcGxlIGV4YW1wbGUgb2YgZm91ci1mdW5jdGlvbiBhcml0aG1ldGljIHdpdGggaW50cyBhbmQgdmFyaWFibGUgbmFtZXMKICAgICAgICBpbnRlZ2VyID0gcHlwYXJzaW5nX2NvbW1vbi5zaWduZWRfaW50ZWdlcgogICAgICAgIHZhcm5hbWUgPSBweXBhcnNpbmdfY29tbW9uLmlkZW50aWZpZXIgCiAgICAgICAgCiAgICAgICAgYXJpdGhfZXhwciA9IGluZml4Tm90YXRpb24oaW50ZWdlciB8IHZhcm5hbWUsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgKCctJywgMSwgb3BBc3NvYy5SSUdIVCksCiAgICAgICAgICAgIChvbmVPZignKiAvJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIChvbmVPZignKyAtJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIF0pCiAgICAgICAgCiAgICAgICAgYXJpdGhfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgNSszKjYKICAgICAgICAgICAgKDUrMykqNgogICAgICAgICAgICAtMi0tMTEKICAgICAgICAgICAgJycnLCBmdWxsRHVtcD1GYWxzZSkKICAgIHByaW50czo6CiAgICAgICAgNSszKjYKICAgICAgICBbWzUsICcrJywgWzMsICcqJywgNl1dXQoKICAgICAgICAoNSszKSo2CiAgICAgICAgW1tbNSwgJysnLCAzXSwgJyonLCA2XV0KCiAgICAgICAgLTItLTExCiAgICAgICAgW1tbJy0nLCAyXSwgJy0nLCBbJy0nLCAxMV1dXQogICAgTnJgAgAAcm8AAAB6ByVzIHRlcm16CSVzJXMgdGVybXJxAAAAekBpZiBudW10ZXJtcz0zLCBvcEV4cHIgbXVzdCBiZSBhIHR1cGxlIG9yIGxpc3Qgb2YgdHdvIGV4cHJlc3Npb25zcnIAAAB6Nm9wZXJhdG9yIG11c3QgYmUgdW5hcnkgKDEpLCBiaW5hcnkgKDIpLCBvciB0ZXJuYXJ5ICgzKXoyb3BlcmF0b3IgbXVzdCBpbmRpY2F0ZSByaWdodCBvciBsZWZ0IGFzc29jaWF0aXZpdHkpAU4pD3IPAAAAcuoAAABy5QAAAHL3AQAAcpABAAByVAAAANoETEVGVHIOAAAAchEAAAByGQAAANoFUklHSFRyegAAAHIbAAAAclABAABygQAAACkR2ghiYXNlRXhwctoGb3BMaXN02gRscGFy2gRycGFycoQAAADaCGxhc3RFeHBycsIAAADaB29wZXJEZWbaBm9wRXhwctoFYXJpdHnaDnJpZ2h0TGVmdEFzc29jcqcBAADaCHRlcm1OYW1l2gdvcEV4cHIx2gdvcEV4cHIy2gh0aGlzRXhwcnICAwAAcncAAABydwAAAHJ4AAAAcmkAAACDEwAAc1IAAAAAOwYBEAEWARgBGAEIARQBCAEIAQwBDAEIAR4BCgEKASYCHgEKARYBHAIKAQwBCgIMAQgBHAEKAQoBJgIeAQoBFgEcAgoCCAEGAQoBEgEIAQgBejQiKD86W14iXG5cclxcXXwoPzoiIil8KD86XFwoPzpbXnhdfHhbMC05YS1mQS1GXSspKSkq+gEieiBzdHJpbmcgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3Rlc3o0Jyg/OlteJ1xuXHJcXF18KD86JycpfCg/OlxcKD86W154XXx4WzAtOWEtZkEtRl0rKSkpKvoBJ3ogc3RyaW5nIGVuY2xvc2VkIGluIHNpbmdsZSBxdW90ZXN6KnF1b3RlZFN0cmluZyB1c2luZyBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlc9oBdXoWdW5pY29kZSBzdHJpbmcgbGl0ZXJhbGMEAAAAAAAAAAUAAAAHAAAAQwAAAHOcAQAAfAB8AWsCchB0AGQBgwGCAXwCZAJrCJABcih0AXwAdAKDAm8sdAF8AXQCgwKQAXIgdAN8AIMBZANrAnKmdAN8AYMBZANrAnKmfANkAmsJcoB0BHQFfAMPAHQGfAB8ARcAdAdqCBcAZANkBI0CFwCDAYMBaglkBWQGhACDAX0CbiR0CmoLgwB0BnwAfAEXAHQHaggXAIMBaglkB2QGhACDARcAfQJueHwDZAJrCXLqdAR0BXwDDwB0DHwAgwEPABcAdAx8AYMBDwAXAHQGdAdqCGQDZASNAhcAgwGDAWoJZAhkBoQAgwF9Am40dAR0BXQMfACDAQ8AdAx8AYMBDwAXAHQGdAdqCGQDZASNAhcAgwGDAWoJZAlkBoQAgwF9Am4IdABkCoMBggF0DYMAfQR8A2QCawmQAXJifAR0DnQPfACDAXQQfAN8BEIAfAJCAIMBFwB0D3wBgwEXAIMBSwB9BG4kfAR0DnQPfACDAXQQfAR8AkIAgwEXAHQPfAGDARcAgwFLAH0EfARqEWQLfAB8AWYCFgCDAQEAfARTACkMYX4JAAAKICAgIEhlbHBlciBtZXRob2QgZm9yIGRlZmluaW5nIG5lc3RlZCBsaXN0cyBlbmNsb3NlZCBpbiBvcGVuaW5nIGFuZCBjbG9zaW5nCiAgICBkZWxpbWl0ZXJzICgiKCIgYW5kICIpIiBhcmUgdGhlIGRlZmF1bHQpLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBvcGVuZXIgLSBvcGVuaW5nIGNoYXJhY3RlciBmb3IgYSBuZXN0ZWQgbGlzdCAoZGVmYXVsdD1DeyIoIn0pOyBjYW4gYWxzbyBiZSBhIHB5cGFyc2luZyBleHByZXNzaW9uCiAgICAgLSBjbG9zZXIgLSBjbG9zaW5nIGNoYXJhY3RlciBmb3IgYSBuZXN0ZWQgbGlzdCAoZGVmYXVsdD1DeyIpIn0pOyBjYW4gYWxzbyBiZSBhIHB5cGFyc2luZyBleHByZXNzaW9uCiAgICAgLSBjb250ZW50IC0gZXhwcmVzc2lvbiBmb3IgaXRlbXMgd2l0aGluIHRoZSBuZXN0ZWQgbGlzdHMgKGRlZmF1bHQ9Q3tOb25lfSkKICAgICAtIGlnbm9yZUV4cHIgLSBleHByZXNzaW9uIGZvciBpZ25vcmluZyBvcGVuaW5nIGFuZCBjbG9zaW5nIGRlbGltaXRlcnMgKGRlZmF1bHQ9Q3txdW90ZWRTdHJpbmd9KQoKICAgIElmIGFuIGV4cHJlc3Npb24gaXMgbm90IHByb3ZpZGVkIGZvciB0aGUgY29udGVudCBhcmd1bWVudCwgdGhlIG5lc3RlZAogICAgZXhwcmVzc2lvbiB3aWxsIGNhcHR1cmUgYWxsIHdoaXRlc3BhY2UtZGVsaW1pdGVkIGNvbnRlbnQgYmV0d2VlbiBkZWxpbWl0ZXJzCiAgICBhcyBhIGxpc3Qgb2Ygc2VwYXJhdGUgdmFsdWVzLgoKICAgIFVzZSB0aGUgQ3tpZ25vcmVFeHByfSBhcmd1bWVudCB0byBkZWZpbmUgZXhwcmVzc2lvbnMgdGhhdCBtYXkgY29udGFpbgogICAgb3BlbmluZyBvciBjbG9zaW5nIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgb3BlbmluZwogICAgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIGZvciBuZXN0aW5nLCBzdWNoIGFzIHF1b3RlZFN0cmluZyBvciBhIGNvbW1lbnQKICAgIGV4cHJlc3Npb24uICBTcGVjaWZ5IG11bHRpcGxlIGV4cHJlc3Npb25zIHVzaW5nIGFuIEN7THtPcn19IG9yIEN7THtNYXRjaEZpcnN0fX0uCiAgICBUaGUgZGVmYXVsdCBpcyBMe3F1b3RlZFN0cmluZ30sIGJ1dCBpZiBubyBleHByZXNzaW9ucyBhcmUgdG8gYmUgaWdub3JlZCwKICAgIHRoZW4gcGFzcyBDe05vbmV9IGZvciB0aGlzIGFyZ3VtZW50LgoKICAgIEV4YW1wbGU6OgogICAgICAgIGRhdGFfdHlwZSA9IG9uZU9mKCJ2b2lkIGludCBzaG9ydCBsb25nIGNoYXIgZmxvYXQgZG91YmxlIikKICAgICAgICBkZWNsX2RhdGFfdHlwZSA9IENvbWJpbmUoZGF0YV90eXBlICsgT3B0aW9uYWwoV29yZCgnKicpKSkKICAgICAgICBpZGVudCA9IFdvcmQoYWxwaGFzKydfJywgYWxwaGFudW1zKydfJykKICAgICAgICBudW1iZXIgPSBweXBhcnNpbmdfY29tbW9uLm51bWJlcgogICAgICAgIGFyZyA9IEdyb3VwKGRlY2xfZGF0YV90eXBlICsgaWRlbnQpCiAgICAgICAgTFBBUixSUEFSID0gbWFwKFN1cHByZXNzLCAiKCkiKQoKICAgICAgICBjb2RlX2JvZHkgPSBuZXN0ZWRFeHByKCd7JywgJ30nLCBpZ25vcmVFeHByPShxdW90ZWRTdHJpbmcgfCBjU3R5bGVDb21tZW50KSkKCiAgICAgICAgY19mdW5jdGlvbiA9IChkZWNsX2RhdGFfdHlwZSgidHlwZSIpIAogICAgICAgICAgICAgICAgICAgICAgKyBpZGVudCgibmFtZSIpCiAgICAgICAgICAgICAgICAgICAgICArIExQQVIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KGFyZyksIFtdKSgiYXJncyIpICsgUlBBUiAKICAgICAgICAgICAgICAgICAgICAgICsgY29kZV9ib2R5KCJib2R5IikpCiAgICAgICAgY19mdW5jdGlvbi5pZ25vcmUoY1N0eWxlQ29tbWVudCkKICAgICAgICAKICAgICAgICBzb3VyY2VfY29kZSA9ICcnJwogICAgICAgICAgICBpbnQgaXNfb2RkKGludCB4KSB7IAogICAgICAgICAgICAgICAgcmV0dXJuICh4JTIpOyAKICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGludCBkZWNfdG9faGV4KGNoYXIgaGNoYXIpIHsgCiAgICAgICAgICAgICAgICBpZiAoaGNoYXIgPj0gJzAnICYmIGhjaGFyIDw9ICc5JykgeyAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9yZChoY2hhciktb3JkKCcwJykpOyAKICAgICAgICAgICAgICAgIH0gZWxzZSB7IAogICAgICAgICAgICAgICAgICAgIHJldHVybiAoMTArb3JkKGhjaGFyKS1vcmQoJ0EnKSk7CiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9CiAgICAgICAgJycnCiAgICAgICAgZm9yIGZ1bmMgaW4gY19mdW5jdGlvbi5zZWFyY2hTdHJpbmcoc291cmNlX2NvZGUpOgogICAgICAgICAgICBwcmludCgiJShuYW1lKXMgKCUodHlwZSlzKSBhcmdzOiAlKGFyZ3MpcyIgJSBmdW5jKQoKICAgIHByaW50czo6CiAgICAgICAgaXNfb2RkIChpbnQpIGFyZ3M6IFtbJ2ludCcsICd4J11dCiAgICAgICAgZGVjX3RvX2hleCAoaW50KSBhcmdzOiBbWydjaGFyJywgJ2hjaGFyJ11dCiAgICB6Lm9wZW5pbmcgYW5kIGNsb3Npbmcgc3RyaW5ncyBjYW5ub3QgYmUgdGhlIHNhbWVOcnIAAAApAXJbAgAAYwEAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQBqAIMAUwApAk5yAQAAACkBcrIAAAApAXJ2AAAAcncAAABydwAAAHJ4AAAAcnkAAAA5FAAAcwAAAAB6HG5lc3RlZEV4cHIuPGxvY2Fscz4uPGxhbWJkYT5jAQAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAGoAgwBTACkCTnIBAAAAKQFysgAAACkBcnYAAABydwAAAHJ3AAAAcngAAAByeQAAADwUAABzAAAAAGMBAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAagCDAFMAKQJOcgEAAAApAXKyAAAAKQFydgAAAHJ3AAAAcncAAAByeAAAAHJ5AAAAQhQAAHMAAAAAYwEAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQBqAIMAUwApAk5yAQAAACkBcrIAAAApAXJ2AAAAcncAAABydwAAAHJ4AAAAcnkAAABGFAAAcwAAAAB6T29wZW5pbmcgYW5kIGNsb3NpbmcgYXJndW1lbnRzIG11c3QgYmUgc3RyaW5ncyBpZiBubyBjb250ZW50IGV4cHJlc3Npb24gaXMgZ2l2ZW56Fm5lc3RlZCAlcyVzIGV4cHJlc3Npb24pEnL3AQAAcnoAAABy2AAAAHLlAAAAcgoAAAByGQAAAHIJAAAAciQAAABydAEAAHKBAAAAckMAAABy2QAAAHIVAAAAcg8AAAByEQAAAHIrAAAAcjIAAABykAEAACkF2gZvcGVuZXLaBmNsb3NlctoHY29udGVudHLAAgAAcoQAAABydwAAAHJ3AAAAcngAAAByUAAAAPcTAABzNAAAAAA6CAEIAQoBFgEYAQgBCAEcAQwCGAEOAggBBAEYARQBDAIWARQBDAIIAQYBCgEqAiQBEgFjAwAAAAAAAAALAAAABgAAAAMAAABz5AAAAIcAZgFkAWQChAh9A4cAZgFkA2QEhAh9BIcAZgFkBWQGhAh9BXQAdAGDAGoCZAeDAWoDgwCDAX0GdASDAHQEgwBqBXwEgwEXAGoGZAiDAX0HdASDAGoFfAODAWoGZAmDAX0IdASDAGoFfAWDAWoGZAqDAX0JfAJypnQHdAh8BoMBfAcXAHQAfAh0B3wAgwEXAHQIfAaDARcAgwEXAHwJFwCDAX0KbiR0B3QIfAaDAXQAfAh0B3wAgwEXAHQIfAaDARcAgwEXAIMBfQp8AGoJdAp0AYMAFwCDAQEAfApqBmQLgwFTACkMYQoJAAAKICAgIEhlbHBlciBtZXRob2QgZm9yIGRlZmluaW5nIHNwYWNlLWRlbGltaXRlZCBpbmRlbnRhdGlvbiBibG9ja3MsIHN1Y2ggYXMKICAgIHRob3NlIHVzZWQgdG8gZGVmaW5lIGJsb2NrIHN0YXRlbWVudHMgaW4gUHl0aG9uIHNvdXJjZSBjb2RlLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBibG9ja1N0YXRlbWVudEV4cHIgLSBleHByZXNzaW9uIGRlZmluaW5nIHN5bnRheCBvZiBzdGF0ZW1lbnQgdGhhdAogICAgICAgICAgICBpcyByZXBlYXRlZCB3aXRoaW4gdGhlIGluZGVudGVkIGJsb2NrCiAgICAgLSBpbmRlbnRTdGFjayAtIGxpc3QgY3JlYXRlZCBieSBjYWxsZXIgdG8gbWFuYWdlIGluZGVudGF0aW9uIHN0YWNrCiAgICAgICAgICAgIChtdWx0aXBsZSBzdGF0ZW1lbnRXaXRoSW5kZW50ZWRCbG9jayBleHByZXNzaW9ucyB3aXRoaW4gYSBzaW5nbGUgZ3JhbW1hcgogICAgICAgICAgICBzaG91bGQgc2hhcmUgYSBjb21tb24gaW5kZW50U3RhY2spCiAgICAgLSBpbmRlbnQgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBibG9jayBtdXN0IGJlIGluZGVudGVkIGJleW9uZCB0aGUKICAgICAgICAgICAgdGhlIGN1cnJlbnQgbGV2ZWw7IHNldCB0byBGYWxzZSBmb3IgYmxvY2sgb2YgbGVmdC1tb3N0IHN0YXRlbWVudHMKICAgICAgICAgICAgKGRlZmF1bHQ9Q3tUcnVlfSkKCiAgICBBIHZhbGlkIGJsb2NrIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgQ3tibG9ja1N0YXRlbWVudH0uCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGF0YSA9ICcnJwogICAgICAgIGRlZiBBKHopOgogICAgICAgICAgQTEKICAgICAgICAgIEIgPSAxMDAKICAgICAgICAgIEcgPSBBMgogICAgICAgICAgQTIKICAgICAgICAgIEEzCiAgICAgICAgQgogICAgICAgIGRlZiBCQihhLGIsYyk6CiAgICAgICAgICBCQjEKICAgICAgICAgIGRlZiBCQkEoKToKICAgICAgICAgICAgYmJhMQogICAgICAgICAgICBiYmEyCiAgICAgICAgICAgIGJiYTMKICAgICAgICBDCiAgICAgICAgRAogICAgICAgIGRlZiBzcGFtKHgseSk6CiAgICAgICAgICAgICBkZWYgZWdncyh6KToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgJycnCgoKICAgICAgICBpbmRlbnRTdGFjayA9IFsxXQogICAgICAgIHN0bXQgPSBGb3J3YXJkKCkKCiAgICAgICAgaWRlbnRpZmllciA9IFdvcmQoYWxwaGFzLCBhbHBoYW51bXMpCiAgICAgICAgZnVuY0RlY2wgPSAoImRlZiIgKyBpZGVudGlmaWVyICsgR3JvdXAoICIoIiArIE9wdGlvbmFsKCBkZWxpbWl0ZWRMaXN0KGlkZW50aWZpZXIpICkgKyAiKSIgKSArICI6IikKICAgICAgICBmdW5jX2JvZHkgPSBpbmRlbnRlZEJsb2NrKHN0bXQsIGluZGVudFN0YWNrKQogICAgICAgIGZ1bmNEZWYgPSBHcm91cCggZnVuY0RlY2wgKyBmdW5jX2JvZHkgKQoKICAgICAgICBydmFsdWUgPSBGb3J3YXJkKCkKICAgICAgICBmdW5jQ2FsbCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiKCIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHJ2YWx1ZSkpICsgIikiKQogICAgICAgIHJ2YWx1ZSA8PCAoZnVuY0NhbGwgfCBpZGVudGlmaWVyIHwgV29yZChudW1zKSkKICAgICAgICBhc3NpZ25tZW50ID0gR3JvdXAoaWRlbnRpZmllciArICI9IiArIHJ2YWx1ZSkKICAgICAgICBzdG10IDw8ICggZnVuY0RlZiB8IGFzc2lnbm1lbnQgfCBpZGVudGlmaWVyICkKCiAgICAgICAgbW9kdWxlX2JvZHkgPSBPbmVPck1vcmUoc3RtdCkKCiAgICAgICAgcGFyc2VUcmVlID0gbW9kdWxlX2JvZHkucGFyc2VTdHJpbmcoZGF0YSkKICAgICAgICBwYXJzZVRyZWUucHByaW50KCkKICAgIHByaW50czo6CiAgICAgICAgW1snZGVmJywKICAgICAgICAgICdBJywKICAgICAgICAgIFsnKCcsICd6JywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0ExJ10sIFtbJ0InLCAnPScsICcxMDAnXV0sIFtbJ0cnLCAnPScsICdBMiddXSwgWydBMiddLCBbJ0EzJ11dXSwKICAgICAgICAgJ0InLAogICAgICAgICBbJ2RlZicsCiAgICAgICAgICAnQkInLAogICAgICAgICAgWycoJywgJ2EnLCAnYicsICdjJywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0JCMSddLCBbWydkZWYnLCAnQkJBJywgWycoJywgJyknXSwgJzonLCBbWydiYmExJ10sIFsnYmJhMiddLCBbJ2JiYTMnXV1dXV1dLAogICAgICAgICAnQycsCiAgICAgICAgICdEJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ3NwYW0nLAogICAgICAgICAgWycoJywgJ3gnLCAneScsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbW1snZGVmJywgJ2VnZ3MnLCBbJygnLCAneicsICcpJ10sICc6JywgW1sncGFzcyddXV1dXV1dIAogICAgYwMAAAAAAAAABAAAAAQAAAATAAAAc04AAAB8AXQAfACDAWsFchBkAFMAdAF8AXwAgwJ9A3wDiABkBBkAawNySnwDiABkBRkAawRyPnQCfAB8AWQCgwOCAXQDfAB8AWQDgwOCAWQAUwApBk5ycgAAAHoPaWxsZWdhbCBuZXN0aW5nehBub3QgYSBwZWVyIGVudHJ5cnMAAABycwAAACkEcuUAAAByOQAAAHIhAAAAch8AAAApBHKLAAAAclgBAABydgAAANoGY3VyQ29sKQHaC2luZGVudFN0YWNrcncAAAByeAAAANoPY2hlY2tQZWVySW5kZW50nxQAAHMOAAAAAAEMAAQBCgEMAQwBDAF6JmluZGVudGVkQmxvY2suPGxvY2Fscz4uY2hlY2tQZWVySW5kZW50YwMAAAAAAAAABAAAAAQAAAATAAAAczIAAAB0AHwBfACDAn0DfAOIAGQDGQBrBHIiiABqAXwDgwEBAG4MdAJ8AHwBZAKDA4IBZABTACkETnJyAAAAeg5ub3QgYSBzdWJlbnRyeXJzAAAAKQNyOQAAAHIMAQAAch8AAAApBHKLAAAAclgB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OGU5ZRRlOmo7gwBlOEIAZDhkOY0CgwFqC2Q6gwFaPGUpZQRkO2QKhACDAYMBWj1lKWUEZDxkCoQAgwGDAVo+ZD1TAClCcm4AAABhrgoAAAogICAgSGVyZSBhcmUgc29tZSBjb21tb24gbG93LWxldmVsIGV4cHJlc3Npb25zIHRoYXQgbWF5IGJlIHVzZWZ1bCBpbiBqdW1wLXN0YXJ0aW5nIHBhcnNlciBkZXZlbG9wbWVudDoKICAgICAtIG51bWVyaWMgZm9ybXMgKEx7aW50ZWdlcnM8aW50ZWdlcj59LCBMe3JlYWxzPHJlYWw+fSwgTHtzY2llbnRpZmljIG5vdGF0aW9uPHNjaV9yZWFsPn0pCiAgICAgLSBjb21tb24gTHtwcm9ncmFtbWluZyBpZGVudGlmaWVyczxpZGVudGlmaWVyPn0KICAgICAtIG5ldHdvcmsgYWRkcmVzc2VzIChMe01BQzxtYWNfYWRkcmVzcz59LCBMe0lQdjQ8aXB2NF9hZGRyZXNzPn0sIEx7SVB2NjxpcHY2X2FkZHJlc3M+fSkKICAgICAtIElTTzg2MDEgTHtkYXRlczxpc284NjAxX2RhdGU+fSBhbmQgTHtkYXRldGltZTxpc284NjAxX2RhdGV0aW1lPn0KICAgICAtIEx7VVVJRDx1dWlkPn0KICAgICAtIEx7Y29tbWEtc2VwYXJhdGVkIGxpc3Q8Y29tbWFfc2VwYXJhdGVkX2xpc3Q+fQogICAgUGFyc2UgYWN0aW9uczoKICAgICAtIEN7THtjb252ZXJ0VG9JbnRlZ2VyfX0KICAgICAtIEN7THtjb252ZXJ0VG9GbG9hdH19CiAgICAgLSBDe0x7Y29udmVydFRvRGF0ZX19CiAgICAgLSBDe0x7Y29udmVydFRvRGF0ZXRpbWV9fQogICAgIC0gQ3tMe3N0cmlwSFRNTFRhZ3N9fQogICAgIC0gQ3tMe3VwY2FzZVRva2Vuc319CiAgICAgLSBDe0x7ZG93bmNhc2VUb2tlbnN9fQoKICAgIEV4YW1wbGU6OgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mbnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5oZXhfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgICAgICAxMDAKICAgICAgICAgICAgRkYKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmZyYWN0aW9uLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGZyYWN0aW9ucwogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubWl4ZWRfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBtaXhlZCBmcmFjdGlvbnMKICAgICAgICAgICAgMQogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAxLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIGltcG9ydCB1dWlkCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHV1aWQuVVVJRCkpCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIHV1aWQKICAgICAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgICAgICcnJykKICAgIHByaW50czo6CiAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgdHlwZQogICAgICAgIDEwMAogICAgICAgIFsxMDBdCgogICAgICAgIC0xMDAKICAgICAgICBbLTEwMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDBdCgogICAgICAgIDMuMTQxNTkKICAgICAgICBbMy4xNDE1OV0KCiAgICAgICAgNi4wMmUyMwogICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgMWUtMTIKICAgICAgICBbMWUtMTJdCgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgZmxvYXQKICAgICAgICAxMDAKICAgICAgICBbMTAwLjBdCgogICAgICAgIC0xMDAKICAgICAgICBbLTEwMC4wXQoKICAgICAgICArMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGhleCBudW1iZXJzCiAgICAgICAgMTAwCiAgICAgICAgWzI1Nl0KCiAgICAgICAgRkYKICAgICAgICBbMjU1XQoKICAgICAgICAjIGZyYWN0aW9ucwogICAgICAgIDEvMgogICAgICAgIFswLjVdCgogICAgICAgIC0zLzQKICAgICAgICBbLTAuNzVdCgogICAgICAgICMgbWl4ZWQgZnJhY3Rpb25zCiAgICAgICAgMQogICAgICAgIFsxXQoKICAgICAgICAxLzIKICAgICAgICBbMC41XQoKICAgICAgICAtMy80CiAgICAgICAgWy0wLjc1XQoKICAgICAgICAxLTMvNAogICAgICAgIFsxLjc1XQoKICAgICAg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YWlsCiAgICAgICAgU2VsZWN0IF5eXiBmcm94IFN5cy5kdWFsCgogICAgICAgIHpdCiAgICAgICAgMTAwCiAgICAgICAgLTEwMAogICAgICAgICsxMDAKICAgICAgICAzLjE0MTU5CiAgICAgICAgNi4wMmUyMwogICAgICAgIDFlLTEyCiAgICAgICAgeiAKICAgICAgICAxMDAKICAgICAgICBGRgogICAgICAgIHo2CiAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgKQFycQAAACkCcuACAABGKQFOKQJGVCkBVCkBcpsAAAApAVQp4nK6AAAA2gtfX3ZlcnNpb25fX9oPX192ZXJzaW9uVGltZV9f2gpfX2F1dGhvcl9fcpwAAADaB3dlYWtyZWZyAgAAAHLhAAAActkAAAByfwAAAHLuAQAAcooBAAByZAIAAHLJAQAAckEBAAByXwEAAHLAAQAAcgMAAADaB190aHJlYWRyBAAAANoLSW1wb3J0RXJyb3LaCXRocmVhZGluZ3IFAAAAcsUBAABaC29yZGVyZWRkaWN02gdfX2FsbF9fcvYBAADaDHZlcnNpb25faW5mb3JeAQAAciQBAADaB21heHNpemVyMwIAAHJ8AAAActgAAADaA2NocnIHAwAAcoUAAAByqAIAAHLlAAAAcjsBAADaCHJldmVyc2VkctMAAAByvwEAAHI9AQAAco4CAAByWQIAAHJaAgAAcm0BAABaBm1heGludNoGeHJhbmdlcuYAAADaC19fYnVpbHRpbl9fcowAAADaBWZuYW1lcgwBAABybgEAAHKrAAAAcrgAAABy1QAAAHKUAAAAcsYAAABylQAAANoPYXNjaWlfdXBwZXJjYXNl2g9hc2NpaV9sb3dlcmNhc2VyNAAAAHJSAAAAckQAAAByMwAAAHLxAgAAcrEAAADaCXByaW50YWJsZXJWAAAAcm8BAAByHQAAAHIfAAAAciEAAAByIwAAAHImAAAAcr4AAAByIgAAANoOTXV0YWJsZU1hcHBpbmfaCHJlZ2lzdGVycjkAAABySgAAAHJHAAAAclEBAAByVQEAAHJXAQAAclEAAABycwEAAHIkAAAAciwAAAByDQAAAHIXAAAAchUAAAByGgMAAHJ3AQAAchIAAAByCAAAAHIHAAAAcmwAAAByLwAAAHInAAAAciUAAAByCQAAAHIuAAAAcoYCAAByEAAAAHIUAAAAchMAAAByKgAAAHIpAAAAcjEAAAByMAAAAHIgAAAAcgYAAAByHAAAAHIWAAAAcgwAAAByHgAAAHIOAAAAchgAAABytAIAAHIZAAAAcjIAAAByvgIAAHK/AgAAchsAAAByKAAAAHIPAAAAcs4CAAByLQAAAHIKAAAAchEAAAByCwAAAHIrAAAAchoAAAByYgAAAHJAAAAAcjwAAABy5gEAAHJPAAAAck4AAAByVQIAAHJTAAAAckEAAAByZwAAAHJoAAAAcmoAAABykAEAAHJDAAAAckkAAABySAAAAHJhAAAAcmAAAABygQAAANoMX2VzY2FwZWRQdW5j2g9fZXNjYXBlZEhleENoYXLaD19lc2NhcGVkT2N0Q2hhctoHVU5JQ09ERdoLX3NpbmdsZUNoYXLaCl9jaGFyUmFuZ2VylQEAAHIQAwAAcl8AAAByTQAAAHJcAAAAcloAAABybQAAAHJkAAAAckIAAAByJAMAAHJLAAAAckwAAAByZQAAAHIlAwAAcmsAAAByVAAAAHIvAwAAcjADAAByaQAAAHJVAAAAcj4AAAByXgAAAHJZAAAAcmMAAAByUAAAAHJmAAAAcjUAAAByVwAAAHI3AAAAcjYAAABy1gAAAHKNAAAAck8DAABy/QAAAHI7AAAAclsAAAByOAAAAHJFAAAAcgUCAAByXQAAAHI/AAAAcj0AAAByRgAAAHJYAAAActcBAABydgMAAHI6AAAAcm4AAABylgAAAFoLc2VsZWN0VG9rZW5aCWZyb21Ub2tlbtoFaWRlbnRaCmNvbHVtbk5hbWVaDmNvbHVtbk5hbWVMaXN0Wgpjb2x1bW5TcGVjWgl0YWJsZU5hbWVaDXRhYmxlTmFtZUxpc3RaCXNpbXBsZVNRTHIxAgAAcmwDAAByVAMAAHJWAwAAcnUDAAByYgMAAHJ3AAAAcncAAABydwAAAHJ4AAAA2gg8bW9kdWxlPj0AAABz4AEAAAQCBAEEAQQCCAEMAQgBCAEIAQgBCAEIAQgBCAEIAQwCAgEQAQ4BEgICARABDgECARABDgEQBRABEAEOAQoBCgEOAQoBDgEKAQwBDAEKAQ4BCgEKAQoBDAEKAxIBDAEGAQYBBAEEAQQDHAMGAQQCCBUEAQgBDgECARQBEAEQAhYCCAoQAwwBBAEIAQgBCAEWAhA4EBUQBRATEAgQChB/AH8AfwB/AH8ABwwCCA0IDAgKCAMIAwgDCBsMQBB/AH8AfwB/AH8AfwB/AH8AfwBkEAgQCxAPECYEAQYCEEEQFxASED0QfwAgEEkQfwAKEEcQMxAHEBoQHhAUEA8QEhAUEBcQcBBMEE8QRBB8EE0QGhAgECYQIxAfEAcGARBAEHMQURAEEAgQLBAVEEEQGhAQCCwMEwwfCAkIHAgcCAgMSQgjDCUIBwgZDAEMAQwBDAEMAhgBEgESASYBFAEwAggYCAoIDggOCCwMAwwDCB0IEwgJCD8IAgwjBgEIAQgCFmsEAxYBFgEMARgBHgIYWg5yCgEKAiABFgEoAQoFHAMSAxYBEgMgAwQDEgMQAQIBMAEgBRB/AH8AFAwCCgEKAhACGAEUAQoCGAEUAiIDBBYIAgYHCAMGBwgCBgMIAggBEgEGAg==