YQ0NCgAAAABDGnxjd4oDAOMAAAAAAAAAAAAAAAAAAAAACwAAAEAAAABzzAoAAGQAWgBkAVoBZAJaAmQDWgNkBGQFbARaBGQEZAZsBW0GWgcBAGQEZAVsCFoIZARkBWwJWglkBGQFbApaCmQEZAVsC1oLZARkBWwMWgxkBGQFbA1aDWQEZAVsDloOZARkBWwPWg9kBGQFbBBaEGQEZAdsEW0RWhEBAHoQZARkCGwSbRNaEwEAVwBuHgQAZRR5pgEAAQABAGQEZAhsFW0TWhMBAFkAbgIwAHocZARkCWwWbRdaFwEAZARkCmwWbRhaGAEAVwBuKgQAZRR57gEAAQABAGQEZAlsDW0XWhcBAGQEZApsDW0YWhgBAFkAbgIwAHoQZARkC2wNbRlaGgEAVwBuPgQAZRSQAXk+AQABAAEAehBkBGQLbBttGVoaAQBXAG4YBABlFJABeTgBAAEAAQBkBVoaWQBuAjAAWQBuAjAAZwBkDKIBWhxlHWUJah6DAWQFZA2FAhkAWh9lH2QEGQBkDWsCWiBlIJABcpplCWohWiJlI1okZSVaJmUjWidlKGUpZSplK2UsZR1lLWUuZS9lMGUxZwtaMm5eZQlqM1oiZTRaNWQOZA+EAFonZwBaMmQEZAVsNlo2ZBCgN6EARABdNlo4ehRlMqA5ZTplNmU4gwKhAQEAVwBuGgQAZTuQAXnyAQABAAEAWQCQAXHAWQBuAjAAkAFxwGU8ZBFkEoQAZTVkE4MBRACDAYMBWj1kFGQVhABaPkcAZBZkF4QAZBdlP4MDWkBlBGpBZQRqQhcAWkNkGFpEZURkGRcAWkVlQ2VEFwBaRmUlZBqDAVpHZBugSGQcZBKEAGUEaklEAIMBoQFaSkcAZB1kHoQAZB5lS4MDWkxHAGQfZCCEAGQgZUyDA1pNRwBkIWQihABkImVMgwNaTkcAZCNkJIQAZCRlToMDWk9HAGQlZCaEAGQmZUuDA1pQRwBkJ2QohABkKGU/gwNaUUcAZClkKoQAZCplP4MDWlJlGKBTZVKhAQEAZCtkLIQAWlRkLWQuhABaVWQvZDCEAFpWZDFkMoQAWldkM2Q0hABaWGQ1ZDaEAFpZZDdkOIQAWlqQAWQXZDpkO4QBWltHAGQ8ZD2EAGQ9ZT+DA1pcRwBkPmQ/hABkP2VcgwNaXUcAZEBkQYQAZEFlXYMDWl5HAGRCZEOEAGRDZV2DA1pfRwBkRGRFhABkRWVdgwNaYGVgWmFlYGVcX2JHAGRGZEeEAGRHZV2DA1pjRwBkSGRJhABkSWVggwNaZEcAZEpkS4QAZEtlY4MDWmVHAGRMZE2EAGRNZV2DA1pmRwBkTmRPhABkT2VdgwNaZ0cAZFBkUYQAZFFlXYMDWmhHAGRSZFOEAGRTZV2DA1ppRwBkVGRVhABkVWVdgwNaakcAZFZkV4QAZFdlXYMDWmtHAGRYZFmEAGRZZV2DA1psRwBkWmRbhABkW2VsgwNabUcAZFxkXYQAZF1lbIMDWm5HAGReZF+EAGRfZWyDA1pvRwBkYGRhhABkYWVsgwNacEcAZGJkY4QAZGNlbIMDWnFHAGRkZGWEAGRlZWyDA1pyRwBkZmRnhABkZ2VsgwNac0cAZGhkaYQAZGllXIMDWnRHAGRqZGuEAGRrZXSDA1p1RwBkbGRthABkbWV0gwNadkcAZG5kb4QAZG9ldIMDWndHAGRwZHGEAGRxZXSDA1p4RwBkcmRzhABkc2VcgwNaeUcAZHRkdYQAZHVleYMDWnpHAGR2ZHeEAGR3ZXmDA1p7RwBkeGR5hABkeWV5gwNafEcAZHpke4QAZHtlfIMDWn1HAGR8ZH2EAGR9ZXyDA1p+RwBkfmR/hABkf2U/gwNaf2V/gwBagEcAZIBkgYQAZIFleYMDWoFHAGSCZIOEAGSDZXmDA1qCRwBkhGSFhABkhWV5gwNag0cAZIZkh4QAZIdlg4MDWoRHAGSIZImEAGSJZXmDA1qFRwBkimSLhABki2WFgwNahkcAZIxkjYQAZI1lhYMDWodHAGSOZI+EAGSPZYWDA1qIRwBkkGSRhABkkWWFgwNaiUcAZJJkk4QAZJNlP4MDWopklGSVhABai5ABZBhkmGSZhAFajJABZBlkmmSbhAFajWScZJ2EAFqOZJ5kn4QAWo9koGShhABakGSiZKOEAFqRkAFkGmSlZKaEAVqSZKdkqIQAWpOQAWQbZKlkqoQBWpRkq2SshABalWStZK6EAFqWZV6DAKCXZK+hAVqYZW6DAKCXZLChAVqZZW+DAKCXZLGhAVqaZXCDAKCXZLKhAVqbZXGDAKCXZLOhAVqcZWdlR2S0ZDlktY0DoJ1ktmS3hAChAVqeZWhkuIMBoJ1kuWS3hAChAVqfZWhkuoMBoJ1ku2S3hAChAVqg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Y29udmVydGVkIHRvCkx7TGl0ZXJhbH0gZXhwcmVzc2lvbnMpOjoKCiAgICBmcm9tIHB5cGFyc2luZyBpbXBvcnQgV29yZCwgYWxwaGFzCgogICAgIyBkZWZpbmUgZ3JhbW1hciBvZiBhIGdyZWV0aW5nCiAgICBncmVldCA9IFdvcmQoYWxwaGFzKSArICIsIiArIFdvcmQoYWxwaGFzKSArICIhIgoKICAgIGhlbGxvID0gIkhlbGxvLCBXb3JsZCEiCiAgICBwcmludCAoaGVsbG8sICItPiIsIGdyZWV0LnBhcnNlU3RyaW5nKGhlbGxvKSkKClRoZSBwcm9ncmFtIG91dHB1dHMgdGhlIGZvbGxvd2luZzo6CgogICAgSGVsbG8sIFdvcmxkISAtPiBbJ0hlbGxvJywgJywnLCAnV29ybGQnLCAnISddCgpUaGUgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBncmFtbWFyIGlzIHF1aXRlIHJlYWRhYmxlLCBvd2luZyB0byB0aGUgc2VsZi1leHBsYW5hdG9yeQpjbGFzcyBuYW1lcywgYW5kIHRoZSB1c2Ugb2YgJysnLCAnfCcgYW5kICdeJyBvcGVyYXRvcnMuCgpUaGUgTHtQYXJzZVJlc3VsdHN9IG9iamVjdCByZXR1cm5lZCBmcm9tIEx7UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZzxQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPn0gY2FuIGJlIGFjY2Vzc2VkIGFzIGEgbmVzdGVkIGxpc3QsIGEgZGljdGlvbmFyeSwgb3IgYW4Kb2JqZWN0IHdpdGggbmFtZWQgYXR0cmlidXRlcy4KClRoZSBweXBhcnNpbmcgbW9kdWxlIGhhbmRsZXMgc29tZSBvZiB0aGUgcHJvYmxlbXMgdGhhdCBhcmUgdHlwaWNhbGx5IHZleGluZyB3aGVuIHdyaXRpbmcgdGV4dCBwYXJzZXJzOgogLSBleHRyYSBvciBtaXNzaW5nIHdoaXRlc3BhY2UgKHRoZSBhYm92ZSBwcm9ncmFtIHdpbGwgYWxzbyBoYW5kbGUgIkhlbGxvLFdvcmxkISIsICJIZWxsbyAgLCAgV29ybGQgICEiLCBldGMuKQogLSBxdW90ZWQgc3RyaW5ncwogLSBlbWJlZGRlZCBjb21tZW50cwoKCkdldHRpbmcgU3RhcnRlZCAtCi0tLS0tLS0tLS0tLS0tLS0tClZpc2l0IHRoZSBjbGFzc2VzIEx7UGFyc2VyRWxlbWVudH0gYW5kIEx7UGFyc2VSZXN1bHRzfSB0byBzZWUgdGhlIGJhc2UgY2xhc3NlcyB0aGF0IG1vc3Qgb3RoZXIgcHlwYXJzaW5nCmNsYXNzZXMgaW5oZXJpdCBmcm9tLiBVc2UgdGhlIGRvY3N0cmluZ3MgZm9yIGV4YW1wbGVzIG9mIGhvdyB0bzoKIC0gY29uc3RydWN0IGxpdGVyYWwgbWF0Y2ggZXhwcmVzc2lvbnMgZnJvbSBMe0xpdGVyYWx9IGFuZCBMe0Nhc2VsZXNzTGl0ZXJhbH0gY2xhc3NlcwogLSBjb25zdHJ1Y3QgY2hhcmFjdGVyIHdvcmQtZ3JvdXAgZXhwcmVzc2lvbnMgdXNpbmcgdGhlIEx7V29yZH0gY2xhc3MKIC0gc2VlIGhvdyB0byBjcmVhdGUgcmVwZXRpdGl2ZSBleHByZXNzaW9ucyB1c2luZyBMe1plcm9Pck1vcmV9IGFuZCBMe09uZU9yTW9yZX0gY2xhc3NlcwogLSB1c2UgTHsnKyc8QW5kPn0sIEx7J3wnPE1hdGNoRmlyc3Q+fSwgTHsnXic8T3I+fSwgYW5kIEx7JyYnPEVhY2g+fSBvcGVyYXRvcnMgdG8gY29tYmluZSBzaW1wbGUgZXhwcmVzc2lvbnMgaW50byBtb3JlIGNvbXBsZXggb25lcwogLSBhc3NvY2lhdGUgbmFtZXMgd2l0aCB5b3VyIHBhcnNlZCByZXN1bHRzIHVzaW5nIEx7UGFyc2VyRWxlbWVudC5zZXRSZXN1bHRzTmFtZX0KIC0gZmluZCBzb21lIGhlbHBmdWwgZXhwcmVzc2lvbiBzaG9ydC1jdXRzIGxpa2UgTHtkZWxpbWl0ZWRMaXN0fSBhbmQgTHtvbmVPZn0KIC0gZmluZCBtb3JlIHVzZWZ1bCBjb21tb24gZXhwcmVzc2lvbnMgaW4gdGhlIEx7cHlwYXJzaW5nX2NvbW1vbn0gbmFtZXNwYWNlIGNsYXNzCnoFMi4yLjF6FTE4IFNlcCAyMDE4IDAwOjQ5IFVUQ3oqUGF1bCBNY0d1aXJlIDxwdG1jZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+6QAAAABOKQHaA3JlZikB2ghkYXRldGltZSkB2gVSTG9jaykB2ghJdGVyYWJsZSkB2g5NdXRhYmxlTWFwcGluZykB2gtPcmRlcmVkRGljdClp2gNBbmTaD0Nhc2VsZXNzS2V5d29yZNoPQ2FzZWxlc3NMaXRlcmFs2gpDaGFyc05vdElu2gdDb21iaW5l2gREaWN02gRFYWNo2gVFbXB0edoKRm9sbG93ZWRCedoHRm9yd2FyZNoKR29Ub0NvbHVtbtoFR3JvdXDaB0tleXdvcmTaB0xpbmVFbmTaCUxpbmVTdGFydNoHTGl0ZXJhbNoKTWF0Y2hGaXJzdNoHTm9NYXRjaNoGTm90QW552glPbmVPck1vcmXaCE9ubHlPbmNl2ghPcHRpb25hbNoCT3LaElBhcnNlQmFzZUV4Y2VwdGlvbtoTUGFyc2VFbGVtZW50RW5oYW5jZdoOUGFyc2VFeGNlcHRpb27aD1BhcnNlRXhwcmVzc2lvbtoTUGFyc2VGYXRhbEV4Y2VwdGlvbtoMUGFyc2VSZXN1bHRz2hRQYXJzZVN5bnRheEV4Y2VwdGlvbtoNUGFyc2VyRWxlbWVudNoMUXVvdGVkU3RyaW5n2hlSZWN1cnNpdmVHcmFtbWFyRXhjZXB0aW9u2gVSZWdleNoGU2tpcFRv2glTdHJpbmdFbmTaC1N0cmluZ1N0YXJ02ghTdXBwcmVzc9oFVG9rZW7aDlRva2VuQ29udmVydGVy2gVXaGl0ZdoEV29yZNoHV29yZEVuZNoJV29yZFN0YXJ02gpaZXJvT3JNb3Jl2glhbHBoYW51bXPaBmFscGhhc9oKYWxwaGFzOGJpdNoLYW55Q2xvc2VUYWfaCmFueU9wZW5UYWfaDWNTdHlsZUNvbW1lbnTaA2NvbNoSY29tbWFTZXBhcmF0ZWRMaXN02hBjb21tb25IVE1MRW50aXR52gxjb3VudGVkQXJyYXnaD2NwcFN0eWxlQ29tbWVudNoPZGJsUXVvdGVkU3RyaW5n2g9kYmxTbGFzaENvbW1lbnTaDWRlbGltaXRlZExpc3TaBmRpY3RPZtoOZG93bmNhc2VUb2tlbnPaBWVtcHR52gdoZXhudW1z2gtodG1sQ29tbWVudNoQamF2YVN0eWxlQ29tbWVudNoEbGluZdoHbGluZUVuZNoJbGluZVN0YXJ02gZsaW5lbm/aDG1ha2VIVE1MVGFnc9oLbWFrZVhNTFRhZ3PaDm1hdGNoT25seUF0Q29s2hFtYXRjaFByZXZpb3VzRXhwctoUbWF0Y2hQcmV2aW91c0xpdGVyYWzaCm5lc3RlZEV4cHLaD251bGxEZWJ1Z0FjdGlvbtoEbnVtc9oFb25lT2baB29wQXNzb2PaEm9wZXJhdG9yUHJlY2VkZW5jZdoKcHJpbnRhYmxlc9oIcHVuYzhiaXTaEnB5dGhvblN0eWxlQ29tbWVudNoMcXVvdGVkU3RyaW5n2gxyZW1vdmVRdW90ZXPaEXJlcGxhY2VIVE1MRW50aXR52gtyZXBsYWNlV2l0aNoKcmVzdE9mTGluZdoPc2dsUXVvdGVkU3RyaW5n2gZzcmFuZ2XaCXN0cmluZ0VuZNoLc3RyaW5nU3RhcnTaEHRyYWNlUGFyc2VBY3Rpb27aDXVuaWNvZGVTdHJpbmfaDHVwY2FzZVRva2Vuc9oNd2l0aEF0dHJpYnV0ZdoNaW5kZW50ZWRCbG9ja9oPb3JpZ2luYWxUZXh0Rm9y2gd1bmdyb3Vw2g1pbmZpeE5vdGF0aW9u2gtsb2NhdGVkRXhwctoJd2l0aENsYXNz2gpDbG9zZU1hdGNo2gh0b2tlbk1hcNoQcHlwYXJzaW5nX2NvbW1vbukDAAAAYwEAAAAAAAAAAAAAAAMAAAAIAAAAQwAAAHNkAAAAdAB8AHQBgwJyDnwAUwB6CnQCfACDAVcAUwAEAHQDeV4BAAEAAQB0AXwAgwGgBHQFoAahAGQBoQJ9AXQHZAKDAX0CfAKgCGQDZASEAKEBAQB8AqAJfAGhAQYAWQBTADAAZAVTACkGYRUBAABEcm9wLWluIHJlcGxhY2VtZW50IGZvciBzdHIob2JqKSB0aGF0IHRyaWVzIHRvIGJlIFVuaWNvZGUgZnJpZW5kbHkuIEl0IGZpcnN0IHRyaWVzCiAgICAgICAgICAgc3RyKG9iaikuIElmIHRoYXQgZmFpbHMgd2l0aCBhIFVuaWNvZGVFbmNvZGVFcnJvciwgdGhlbiBpdCB0cmllcyB1bmljb2RlKG9iaikuIEl0CiAgICAgICAgICAgdGhlbiA8IHJldHVybnMgdGhlIHVuaWNvZGUgb2JqZWN0IHwgZW5jb2RlcyBpdCB3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ZgVkBmQHhAFaBmQIZAmEAFoHZQVmAWQKZAuEAVoIZAxkDYQAWglkDmQPhABaCmQQZBGEAFoLZBJkE4QAWgxlDFoNZBRkFYQAWg5kFmQXhABaD2QYZBmEAFoQZBpkG4QAWhFkHGQdhABaEmUTcpxlEFoUZRFaFWUSWhZuJGUQWhdlEVoYZRJaGWQeZB+EAFoUZCBkIYQAWhVkImQjhABaFmQkZCWEAFoaZCZkJ4QAWhtkXGQoZCmEAVocZCpkK4QAWh1kLGQthABaHmQuZC+EAFofZDBkMYQAWiBkMmQzhABaIWQ0ZDWEAFoiZDZkN4QAWiNkOGQ5hABaJGQ6ZDuEAFolZDxkPYQAWiZkXWQ/ZECEAVonZEFkQoQAWihkQ2REhABaKWRFZEaEAFoqZF5kSGRJhAFaK2RKZEuEAFosZExkTYQAWi1kX2RPZFCEAVouZFFkUoQAWi9kU2RUhABaMGRVZFaEAFoxZFdkWIQAWjJkWWRahABaM2QCUwApYHIkAAAAYUkFAAAKICAgIFN0cnVjdHVyZWQgcGFyc2UgcmVzdWx0cywgdG8gcHJvdmlkZSBtdWx0aXBsZSBtZWFucyBvZiBhY2Nlc3MgdG8gdGhlIHBhcnNlZCBkYXRhOgogICAgICAgLSBhcyBhIGxpc3QgKEN7bGVuKHJlc3VsdHMpfSkKICAgICAgIC0gYnkgbGlzdCBpbmRleCAoQ3tyZXN1bHRzWzBdLCByZXN1bHRzWzFdfSwgZXRjLikKICAgICAgIC0gYnkgYXR0cmlidXRlIChDe3Jlc3VsdHMuPHJlc3VsdHNOYW1lPn0gLSBzZWUgTHtQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lfSkKCiAgICBFeGFtcGxlOjoKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIGRhdGVfc3RyID0gKGludGVnZXIuc2V0UmVzdWx0c05hbWUoInllYXIiKSArICcvJyAKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJtb250aCIpICsgJy8nIAogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoImRheSIpKQogICAgICAgICMgZXF1aXZhbGVudCBmb3JtOgogICAgICAgICMgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKCiAgICAgICAgIyBwYXJzZVN0cmluZyByZXR1cm5zIGEgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikKCiAgICAgICAgZGVmIHRlc3QocywgZm49cmVwcik6CiAgICAgICAgICAgIHByaW50KCIlcyAtPiAlcyIgJSAocywgZm4oZXZhbChzKSkpKQogICAgICAgIHRlc3QoImxpc3QocmVzdWx0KSIpCiAgICAgICAgdGVzdCgicmVzdWx0WzBdIikKICAgICAgICB0ZXN0KCJyZXN1bHRbJ21vbnRoJ10iKQogICAgICAgIHRlc3QoInJlc3VsdC5kYXkiKQogICAgICAgIHRlc3QoIidtb250aCcgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCInbWludXRlcycgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCJyZXN1bHQuZHVtcCgpIiwgc3RyKQogICAgcHJpbnRzOjoKICAgICAgICBsaXN0KHJlc3VsdCkgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCiAgICAgICAgcmVzdWx0WzBdIC0+ICcxOTk5JwogICAgICAgIHJlc3VsdFsnbW9udGgnXSAtPiAnMTInCiAgICAgICAgcmVzdWx0LmRheSAtPiAnMzEnCiAgICAgICAgJ21vbnRoJyBpbiByZXN1bHQgLT4gVHJ1ZQogICAgICAgICdtaW51dGVzJyBpbiByZXN1bHQgLT4gRmFsc2UKICAgICAgICByZXN1bHQuZHVtcCgpIC0+IFsnMTk5OScsICcvJywgJzEyJywgJy8nLCAnMzEnXQogICAgICAgIC0gZGF5OiAzMQogICAgICAgIC0gbW9udGg6IDEyCiAgICAgICAgLSB5ZWFyOiAxOTk5CiAgICBOVGMFAAAAAAAAAAAAAAAGAAAAAwAAAEMAAABzIgAAAHQAfAF8AIMCcg58AVMAdAGgAnwAoQF9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bWVkIHBhcnNlIHJlc3VsdHMgYXMgYSBuZXN0ZWQgZGljdGlvbmFyeS4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCiAgICAgICAgICAgIAogICAgICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygnMTIvMzEvMTk5OScpCiAgICAgICAgICAgIHByaW50KHR5cGUocmVzdWx0KSwgcmVwcihyZXN1bHQpKSAjIC0+IDxjbGFzcyAncHlwYXJzaW5nLlBhcnNlUmVzdWx0cyc+IChbJzEyJywgJy8nLCAnMzEnLCAnLycsICcxOTk5J10sIHsnZGF5JzogWygnMTk5OScsIDQpXSwgJ3llYXInOiBbKCcxMicsIDApXSwgJ21vbnRoJzogWygnMzEnLCAyKV19KQogICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0X2RpY3QgPSByZXN1bHQuYXNEaWN0KCkKICAgICAgICAgICAgcHJpbnQodHlwZShyZXN1bHRfZGljdCksIHJlcHIocmVzdWx0X2RpY3QpKSAjIC0+IDxjbGFzcyAnZGljdCc+IHsnZGF5JzogJzE5OTknLCAneWVhcic6ICcxMicsICdtb250aCc6ICczMSd9CgogICAgICAgICAgICAjIGV2ZW4gdGhvdWdoIGEgUGFyc2VSZXN1bHRzIHN1cHBvcnRzIGRpY3QtbGlrZSBhY2Nlc3MsIHNvbWV0aW1lIHlvdSBqdXN0IG5lZWQgdG8gaGF2ZSBhIGRpY3QKICAgICAgICAgICAgaW1wb3J0IGpzb24KICAgICAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhyZXN1bHQpKSAjIC0+IEV4Y2VwdGlvbjogVHlwZUVycm9yOiAuLi4gaXMgbm90IEpTT04gc2VyaWFsaXphYmxlCiAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0LmFzRGljdCgpKSkgIyAtPiB7Im1vbnRoIjogIjMx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ZSBpbnB1dCBzdHJpbmcKICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgTHtJe1BhcnNlckVsZW1lbnQucGFyc2VTdHJpbmd9PFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmc+fSBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICBvbiBwYXJzaW5nIHN0cmluZ3MgY29udGFpbmluZyBDezxUQUI+fXMsIGFuZCBzdWdnZXN0ZWQgbWV0aG9kcyB0byBtYWludGFpbiBhCiAgIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgcGFyc2VkIHN0cmluZywgdGhlIHBhcnNlIGxvY2F0aW9uLCBhbmQgbGluZSBhbmQgY29sdW1uCiAgIHBvc2l0aW9ucyB3aXRoaW4gdGhlIHBhcnNlZCBzdHJpbmcuCiAgIHIBAAAAco0AAABySAEAACkCcvgAAADaBXJmaW5kKQNypgAAANoEc3RyZ3KQAAAAcnkAAAByeQAAAHJ6AAAAcjsAAADIAwAAcwQAAAAACgQBcjsAAABjAgAAAAAAAAAAAAAAAgAAAAUAAABDAAAAcxIAAAB8AaAAZAFkAnwAoQNkAxcAUwApBGEHAgAAUmV0dXJucyBjdXJyZW50IGxpbmUgbnVtYmVyIHdpdGhpbiBhIHN0cmluZywgY291bnRpbmcgbmV3bGluZXMgYXMgbGluZSBzZXBhcmF0b3JzLgogICBUaGUgZmlyc3QgbGluZSBpcyBudW1iZXIgMS4KCiAgIE5vdGU6IHRoZSBkZWZhdWx0IHBhcnNpbmcgYmVoYXZpb3IgaXMgdG8gZXhwYW5kIHRhYnMgaW4gdGhlIGlucHV0IHN0cmluZwogICBiZWZvcmUgc3RhcnRpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIFNlZSBMe0l7UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ308UGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZz59IGZvciBtb3JlIGluZm9ybWF0aW9uCiAgIG9uIHBhcnNpbmcgc3RyaW5ncyBjb250YWluaW5nIEN7PFRBQj59cywgYW5kIHN1Z2dlc3RlZCBtZXRob2RzIHRvIG1haW50YWluIGEKICAgY29uc2lzdGVudCB2aWV3IG9m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AQAAcnoAAADaC190cmltX2FyaXR5DwQAAHMsAAAAAAEIAQwBBgEGAxABCgUMBQYBBgUEAw4BFAIWGAQBAgEGAQr/CAIMAQ4BBgJymwEAAGMAAAAAAAAAAAAAAAAAAAAABQAAAAAAAABzkgIAAGUAWgFkAFoCZAFaA2QCWgRkA1oFZQZkBGQFhACDAVoHZQZkBmQHhACDAVoIZIZkCGQJhAFaCWQKZAuEAFoKZAxkDYQAWgtkh2QOZA+EAVoMZIhkEWQShAFaDWQTZBSEAFoOZBVkFoQAWg9kF2QYhABaEGQZZBqEAFoRZBtkHIQAWhJkHWQehABaE2SJZB9kIIQBWhRkIWQihABaFWSKZCNkJIQBWhZkJWQmhABaF2QnZCiEAFoYRwBkKWQqhABkKmUZgwNaGmUbZCt1AXLgRwBkLGQthABkLWUZgwNaHG4QRwBkLmQthABkLWUZgwNaHGkAWh1lHoMAWh9kL2QvZwJaIGSLZDBkMYQBWiFlFloiZQZkMmQzhACDAVojZANaJGUGZIxkNWQ2hAGDAVolZI1kN2Q4hAFaJmUnZANmAmQ5ZDqEAVooZDtkPIQAWillJ2YBZD1kPoQBWiplJ2QDZgJkP2RAhAFaK2RBZEKEAFosZENkRIQAWi1kRWRGhABaLmRHZEiEAFovZElkSoQAWjBkS2RMhABaMWRNZE6EAFoyZE9kUIQAWjNkUWRShABaNGRTZFSEAFo1ZFVkVoQAWjZkV2RYhABaN2RZZFqEAFo4ZI5kW2RchAFaOWRdZF6EAFo6ZF9kYIQAWjtkYWRihABaPGRjZGSEAFo9ZGVkZoQAWj5kZ2RohABaP2SPZGlkaoQBWkBka2RshABaQWRtZG6EAFpCZG9kcIQAWkNkcWRyhABaRGcAZgFkc2R0hAFaRWSQZHVkdoQBWkaHAGYBZHdkeIQIWkdkeWR6hABaSGR7ZHyEAFpJZH1kfoQAWkpkf2SAhABaS2SRZIFkgoQBWkxkkmSEZIWEAVpNhwAEAFpOUwApk3ImAAAAeilBYnN0cmFjdCBiYXNlIGxldmVsIHBhcnNlciBlbGVtZW50IGNsYXNzLnoEIAoJDUZjAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcwoAAAB8AHQAXwFkAVMAKQJh0QEAAAogICAgICAgIE92ZXJyaWRlcyB0aGUgZGVmYXVs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RGVmaW5lIG5hbWUgZm9yIHJlZmVyZW5jaW5nIG1hdGNoaW5nIHRva2VucyBhcyBhIG5lc3RlZCBhdHRyaWJ1dGUKICAgICAgICBvZiB0aGUgcmV0dXJuZWQgcGFyc2UgcmVzdWx0cy4KICAgICAgICBOT1RFOiB0aGlzIHJldHVybnMgYSAqY29weSogb2YgdGhlIG9yaWdpbmFsIEN7UGFyc2VyRWxlbWVudH0gb2JqZWN0OwogICAgICAgIHRoaXMgaXMgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBkZWZpbmUgYSBiYXNpYyBlbGVtZW50LCBzdWNoIGFzIGFuCiAgICAgICAgaW50ZWdlciwgYW5kIHJlZmVyZW5jZSBpdCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aCBkaWZmZXJlbnQgbmFtZXMuCgogICAgICAgIFlvdSBjYW4gYWxzbyBzZXQgcmVzdWx0cyBuYW1lcyB1c2luZyB0aGUgYWJicmV2aWF0ZWQgc3ludGF4LAogICAgICAgIEN7ZXhwcigibmFtZSIpfSBpbiBwbGFjZSBvZiBDe2V4cHIuc2V0UmVzdWx0c05hbWUoIm5hbWUiKX0gLSAKICAgICAgICBzZWUgTHtJe19fY2FsbF9ffTxfX2NhbGxfXz59LgoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgZGF0ZV9zdHIgPSAoaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgieWVhciIpICsgJy8nIAogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoIm1vbnRoIikgKyAnLycgCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgiZGF5IikpCgogICAgICAgICAgICAjIGVxdWl2YWxlbnQgZm9ybToKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKICAgICAgICDaASpOcnQAAABUKQRy6QAAANoIZW5kc3dpdGhypQEAAHKxAQAAKQRyqwAAAHLaAAAA2g5saXN0QWxsTWF0Y2hlc9oHbmV3c2VsZnJ5AAAAcnkAAAByegAAANoOc2V0UmVzdWx0c05hbWW0BAAAcw4AAAAAFAgBCgEMAQQBBgEIAXocUGFyc2VyRWxlbWVudC5zZXRSZXN1bHRzTmFtZVRjAgAAAAAAAAAAAAAAAwAAAAQAAAADAAAAc0AAAAB8AXImfABqAIkAZAWHAGYBZAJkA4QJfQKIAHwCXwF8AnwAXwBuFnQCfABqAGQEgwJyPHwAagBqAXwAXwB8AFMAKQZ6pk1ldGhvZCB0byBpbnZva2UgdGhlIFB5dGhvbiBwZGIgZGVidWdnZXIgd2hlbiB0aGlzIGVsZW1lbnQgaXMKICAgICAgICAgICBhYm91dCB0byBiZSBwYXJzZWQuIFNldCBDe2JyZWFrRmxhZ30gdG8gVHJ1ZSB0byBlbmFibGUsIEZhbHNlIHRvCiAgICAgICAgICAgZGlzYWJsZS4KICAgICAgICBUYwQAAAAAAAAAAAAAAAUAAAAFAAAAEwAAAHMeAAAAZAFkAGwAfQR8BKABoQABAIgAfAB8AXwCfAODBFMActIAAAApAtoDcGRi2glzZXRfdHJhY2UpBXJ1AQAAcqYAAADaCWRvQWN0aW9uc9oMY2FsbFByZVBhcnNlcsABAACpAdoMX3BhcnNlTWV0aG9kcnkAAAByegAAANoHYnJlYWtlctcEAABzBgAAAAABCAEIAXonUGFyc2VyRWxlbWVudC5zZXRCcmVhay48bG9jYWxzPi5icmVha2Vy2hRfb3JpZ2luYWxQYXJzZU1ldGhvZCkCVFQpA9oGX3BhcnNlcscBAAByDwEAACkDcqsAAADaCWJyZWFrRmxhZ3LGAQAAcnkAAAByxAEAAHJ6AAAA2ghzZXRCcmVha9AEAABzEAAAAAAFBAEGAQ4EBgEIAgwBCgF6FlBhcnNlckVsZW1lbnQuc2V0QnJlYWtjAQAAAAAAAAAAAAAAAwAAAAUAAABPAAAAcyYAAAB0AHQBdAJ0AHwBgwGDAoMBfABfA3wCoARkAWQCoQJ8AF8FfABTACkDYRgHAAAKICAgICAgICBEZWZpbmUgb25lIG9yIG1vcmUgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gc3VjY2Vzc2Z1bGx5IG1hdGNoaW5nIHBhcnNlIGVsZW1lbnQgZGVmaW5pdGlvbi4KICAgICAgICBQYXJzZSBhY3Rpb24gZm4gaXMgYSBjYWxsYWJsZSBtZXRob2Qgd2l0aCAwLTMgYXJndW1lbnRzLCBjYWxsZWQgYXMgQ3tmbihzLGxvYyx0b2tzKX0sCiAgICAgICAgQ3tmbihsb2MsdG9rcyl9LCBDe2ZuKHRva3MpfSwgb3IganVzdCBDe2ZuKCl9LCB3aGVyZToKICAgICAgICAgLSBzICAgPSB0aGUgb3JpZ2luYWwgc3RyaW5nIGJlaW5nIHBhcnNlZCAoc2VlIG5vdGUgYmVsb3cpCiAgICAgICAgIC0gbG9jID0gdGhlIGxvY2F0aW9uIG9mIHRoZSBtYXRjaGluZyBzdWJzdHJpbmcKICAgICAgICAgLSB0b2tzID0gYSBsaXN0IG9mIHRoZSBtYXRjaGVkIHRva2VucywgcGFja2FnZWQgYXMgYSBDe0x7UGFyc2VSZXN1bHRzfX0gb2JqZWN0CiAgICAgICAgSWYgdGhlIGZ1bmN0aW9ucyBpbiBmbnMgbW9kaWZ5IHRoZSB0b2tlbnMsIHRoZXkgY2FuIHJldHVybiB0aGVtIGFzIHRoZSByZXR1cm4KICAgICAgICB2YWx1ZSBmcm9tIGZuLCBhbmQgdGhlIG1vZGlmaWVkIGxpc3Qgb2YgdG9rZW5zIHdpbGwgcmVwbGFjZSB0aGUgb3JpZ2luYWwuCiAgICAgICAgT3RoZXJ3aXNlLCBmbiBkb2VzIG5vdCBuZWVkIHRvIHJldHVybiBhbnkgdmFsdWUuCgogICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzOgogICAgICAgICAtIGNhbGxEdXJpbmdUcnkgPSAoZGVmYXVsdD1De0ZhbHNlfSkgaW5kaWNhdGUgaWYgcGFyc2UgYWN0aW9uIHNob3VsZCBiZSBydW4gZHVyaW5nIGxvb2thaGVhZHMgYW5kIGFsdGVybmF0ZSB0ZXN0aW5nCgogICAgICAgIE5vdGU6IHRoZSBkZWZhdWx0IHBhcnNpbmcgYmVoYXZpb3IgaXMgdG8gZXhwYW5kIHRhYnMgaW4gdGhlIGlucHV0IHN0cmluZwogICAgICAgIGJlZm9yZSBzdGFydGluZyB0aGUgcGFyc2luZyBwcm9jZXNzLiAgU2VlIEx7SXtwYXJzZVN0cmluZ308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aW9uICh3aGljaCBoYXBwZW5zCiAgICAgICAgICAgb2Z0ZW4gaW4gbWFueSBjb21wbGV4IGdyYW1tYXJzKSBjYW4gaW1tZWRpYXRlbHkgcmV0dXJuIGEgY2FjaGVkIHZhbHVlLAogICAgICAgICAgIGluc3RlYWQgb2YgcmUtZXhlY3V0aW5nIHBhcnNpbmcvdmFsaWRhdGluZyBjb2RlLiAgTWVtb2l6aW5nIGlzIGRvbmUgb2YKICAgICAgICAgICBib3RoIHZhbGlkIHJlc3VsdHMgYW5kIHBhcnNpbmcgZXhjZXB0aW9ucy4KICAgICAgICAgICAKICAgICAgICAgICBQYXJhbWV0ZXJzOgogICAgICAgICAgICAtIGNhY2hlX3NpemVfbGltaXQgLSAoZGVmYXVsdD1DezEyOH0pIC0gaWYgYW4gaW50ZWdlciB2YWx1ZSBpcyBwcm92aWRlZAogICAgICAgICAgICAgIHdpbGwgbGltaXQgdGhlIHNpemUgb2YgdGhlIHBhY2tyYXQgY2FjaGU7IGlmIE5vbmUgaXMgcGFzc2VkLCB0aGVuCiAgICAgICAgICAgICAgdGhlIGNhY2hlIHNpemUgd2lsbCBiZSB1bmJvdW5kZWQ7IGlmIDAgaXMgcGFzc2VkLCB0aGUgY2FjaGUgd2lsbAogICAgICAgICAgICAgIGJlIGVmZmVjdGl2ZWx5IGRpc2FibGVkLgogICAgICAgICAgICAKICAgICAgICAgICBUaGlzIHNwZWVkdXAgbWF5IGJyZWFrIGV4aXN0aW5nIHByb2dyYW1zIHRoYXQgdXNlIHBhcnNlIGFjdGlvbnMgdGhhdAogICAgICAgICAgIGhhdmUgc2lkZS1lZmZlY3RzLiAgRm9yIHRoaXMgcmVhc29uLCBwYWNrcmF0IHBhcnNpbmcgaXMgZGlzYWJsZWQgd2hlbgogICAgICAgICAgIHlvdSBmaXJzdCBpbXBvcnQgcHlwYXJzaW5nLiAgVG8gYWN0aXZhdGUgdGhlIHBhY2tyYXQgZmVhdHVyZSwgeW91cgogICAgICAgICAgIHByb2dyYW0gbXVzdCBjYWxsIHRoZSBjbGFzcyBtZXRob2QgQ3tQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXQoKX0uICBJZgogICAgICAgICAgIHlvdXIgcHJvZ3JhbSB1c2VzIEN7cHN5Y299IHRvICJjb21waWxlIGFzIHlvdSBnbyIsIHlvdSBtdXN0IGNhbGwKICAgICAgICAgICBDe2VuYWJsZVBhY2tyYXR9IGJlZm9yZSBjYWxsaW5nIEN7cHN5Y28uZnVsbCgpfS4gIElmIHlvdSBkbyBub3QgZG8gdGhpcywKICAgICAgICAgICBQeXRob24gd2lsbCBjcmFzaC4gIEZvciBiZXN0IHJlc3VsdHMsIGNhbGwgQ3tlbmFibGVQYWNrcmF0KCl9IGltbWVkaWF0ZWx5CiAgICAgICAgICAgYWZ0ZXIgaW1wb3J0aW5nIHB5cGFyc2luZy4KICAgICAgICAgICAKICAgICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgICAgaW1wb3J0IHB5cGFyc2luZwogICAgICAgICAgICAgICBweXBhcnNpbmcuUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0KCkKICAgICAgICBUTikHciYAAADaD19wYWNrcmF0RW5hYmxlZHL9AQAAcg8CAAByCQIAAHIUAgAAcsgBAAApAdoQY2FjaGVfc2l6ZV9saW1pdHJ5AAAAcnkAAAByegAAANoNZW5hYmxlUGFja3JhdCUGAABzDAAAAAAbBgEGAQgBDAIMAXobUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YwMAAAAAAAAAAAAAAAgAAAAKAAAAQwAAAHOwAAAAdACgAaEAAQB8AGoCcxZ8AKADoQABAHwAagREAF0MfQN8A6ADoQABAHEcfABqBXM4fAGgBqEAfQF6PHwAoAd8AWQBoQJcAn0EfQV8AnJyfACgCHwBfAShAn0EdAmDAHQKgwAXAH0GfAagB3wBfAShAgEAVwBuMgQAdAt5pgEAfQcBAHoadABqDHKOggBuBHwHggFXAFkAZAJ9B34Hbg5kAn0HfgcwADAAfAVTAGQCUwApA2FCBQAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuCiAgICAgICAgVGhpcyBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgdG8gdGhlIGNsaWVudCBjb2RlLCBvbmNlIHRoZSBjb21wbGV0ZQogICAgICAgIGV4cHJlc3Npb24gaGFzIGJlZW4gYnVpbHQuCgogICAgICAgIElmIHlvdSB3YW50IHRoZSBncmFtbWFyIHRvIHJlcXVpcmUgdGhhdCB0aGUgZW50aXJlIGlucHV0IHN0cmluZyBiZQogICAgICAgIHN1Y2Nlc3NmdWxseSBwYXJzZWQsIHRoZW4gc2V0IEN7cGFyc2VBbGx9IHRvIFRydWUgKGVxdWl2YWxlbnQgdG8gZW5kaW5nCiAgICAgICAgdGhlIGdyYW1tYXIgd2l0aCBDe0x7U3RyaW5nRW5kKCl9fSkuCgogICAgICAgIE5vdGU6IEN7cGFyc2VTdHJpbmd9IGltcGxpY2l0bHkgY2FsbHMgQ3tleHBhbmR0YWJzKCl9IG9uIHRoZSBpbnB1dCBzdHJpbmcsCiAgICAgICAgaW4gb3JkZXIgdG8gcmVwb3J0IHByb3BlciBjb2x1bW4gbnVtYmVycyBpbiBwYXJzZSBhY3Rpb25zLgogICAgICAgIElmIHRoZSBpbnB1dCBzdHJpbmcgY29udGFpbnMgdGFicyBhbmQKICAgICAgICB0aGUgZ3JhbW1hciB1c2VzIHBhcnNlIGFjdGlvbnMgdGhhdCB1c2UgdGhlIEN7bG9jfSBhcmd1bWVudCB0byBpbmRleCBpbnRvIHRoZQogICAgICAgIHN0cmluZyBiZWluZyBwYXJzZWQsIHlvdSBjYW4gZW5zdXJlIHlvdSBoYXZlIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBpbnB1dAogICAgICAgIHN0cmluZyBieToKICAgICAgICAgLSBjYWxsaW5nIEN7cGFyc2VXaXRoVGFic30gb24geW91ciBncmFtbWFyIGJlZm9yZSBjYWxsaW5nIEN7cGFyc2VTdHJpbmd9CiAgICAgICAgICAgKHNlZSBMe0l7cGFyc2VXaXRoVGFic308cGFyc2VXaXRoVGFicz59KQogICAgICAgICAtIGRlZmluZSB5b3VyIHBhcnNlIGFjdGlvbiB1c2luZyB0aGUgZnVsbCBDeyhzLGxvYyx0b2tzKX0gc2lnbmF0dXJlLCBhbmQKICAgICAgICAgICByZWZlcmVuY2UgdGhlIGlucHV0IHN0cmluZyB1c2luZyB0aGUgcGFyc2UgYWN0aW9uJ3MgQ3tzfSBhcmd1bWVudAogICAgICAgICAtIGV4cGxpY3RseSBleHBhbmQgdGhlIHRhYnMgaW4geW91ciBpbnB1dCBzdHJpbmcgYmVmb3JlIGNhbGxpbmcKICAgICAgICAgICBDe3BhcnNlU3RyaW5nfQogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScpICAjIC0+IFsnYWFhYWEnXQogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScsIHBhcnNlQWxsPVRydWUpICAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgZW5kIG9mIHRleHQKICAgICAgICByAQAAAE4pDXImAAAAchUCAAByrgEAANoKc3RyZWFtbGluZXKsAQAAcqsBAADaCmV4cGFuZHRhYnNyyAEAAHLfAQAAcg8AAAByKwAAAHIfAAAA2hJ2ZXJib3NlX3N0YWNrdHJhY2UpCHKrAAAAcnUBAADaCHBhcnNlQWxsctkBAABypgAAAHLoAQAA2gJzZXJ8AQAAcnkAAAByeQAAAHJ6AAAA2gtwYXJzZVN0cmluZ0gGAABzJAAAAAAbCAEGAQgCCgEKAQYBCAECARABBAEMAQwBEAEOAQYBBAMaAnoZUGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ2MEAAAAAAAAAAAAAAAPAAAACgAAAGMAAABzNgEAAHwAagBzDnwAoAGhAAEAfABqAkQAXQx9BHwEoAGhAAEAcRR8AGoDczR0BHwBgwGgBaEAfQF0BnwBgwF9BWQBfQZ8AGoHfQd8AGoIfQh0CaAKoQABAGQBfQl6onwGfAVrAXL4fAl8AmsAcvh6IHwHfAF8BoMCfQp8CHwBfApkAmQDjQNcAn0LfQxXAG4aBAB0C3mkAQABAAEAfApkBBcAfQZZAHFaMAB8C3wGawRy7nwJZAQ3AH0JfAx8CnwLZgNWAAEAfANy6HwHfAF8BoMCfQ18DXwGawRy3nwLfQZx7HwGZAQ3AH0GcfZ8C30GcVp8CmQEFwB9BnFaVwBuNgQAdAyQAXkwAQB9DgEAehx0CWoNkAFyGIIAbgR8DoIBVwBZAGQFfQ5+Dm4KZAV9Dn4OMAAwAGQFUwApBmGGBAAACiAgICAgICAgU2NhbiB0aGUgaW5wdXQgc3RyaW5nIGZvciBleHByZXNzaW9uIG1hdGNoZXMuICBFYWNoIG1hdGNoIHdpbGwgcmV0dXJuIHRoZQogICAgICAgIG1hdGNoaW5nIHRva2Vucywgc3RhcnQgbG9jYXRpb24sIGFuZCBlbmQgbG9jYXRpb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBDe21heE1hdGNoZXN9IGFyZ3VtZW50LCB0byBjbGlwIHNjYW5uaW5nIGFmdGVyICduJyBtYXRjaGVzIGFyZSBmb3VuZC4gIElmCiAgICAgICAgQ3tvdmVybGFwfSBpcyBzcGVjaWZpZWQsIHRoZW4gb3ZlcmxhcHBpbmcgbWF0Y2hlcyB3aWxsIGJlIHJlcG9ydGVkLgoKICAgICAgICBOb3RlIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgbG9jYXRpb25zIGFyZSByZXBvcnRlZCByZWxhdGl2ZSB0byB0aGUgc3RyaW5nCiAgICAgICAgYmVpbmcgcGFyc2VkLiAgU2VlIEx7SXtwYXJzZVN0cmluZ308cGFyc2VTdHJpbmc+fSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYXJzaW5nCiAgICAgICAgc3RyaW5ncyB3aXRoIGVtYmVkZGVkIHRhYnMuCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBzb3VyY2UgPSAic2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3IgogICAgICAgICAgICBwcmludChzb3VyY2UpCiAgICAgICAgICAgIGZvciB0b2tlbnMsc3RhcnQsZW5kIGluIFdvcmQoYWxwaGFzKS5zY2FuU3RyaW5nKHNvdXJjZSk6CiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyAnXicqKGVuZC1zdGFydCkpCiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyB0b2tlbnNbMF0pCiAgICAgICAgCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAKICAgICAgICAgICAgc2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3CiAgICAgICAgICAgIF5eXl5eCiAgICAgICAgICAgIHNsZGpmCiAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgogICAgICAgICAgICAgICAgICAgIGxzZGpqa2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZGtqZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGtqc2ZkCiAgICAgICAgcgEAAABGqQFywwEAAHKNAAAATikOcq4BAAByGgIAAHKsAQAAcqsBAAByiAAAAHIbAgAAcvgAAABy3wEAAHLIAQAAciYAAAByFQIAAHIhAAAAch8AAAByHAIAACkPcqsAAABydQEAANoKbWF4TWF0Y2hlc9oHb3ZlcmxhcHLZAQAAct4BAABypgAAANoKcHJlcGFyc2VGbtoHcGFyc2VGbtoHbWF0Y2hlc3LmAQAA2gduZXh0TG9jcugBAADaB25leHRsb2NyfAEAAHJ5AAAAcnkAAAByegAAANoKc2NhblN0cmluZ3oGAABzQgAAAAAeBgEIAQoBCgIGAQwBCAEEAQYBBgEIAQQBAgEQAQIBCgEWAQwBDgIIAQgBDAEEAQoBCAEGAgoCBgIOARABCAEEA3oYUGFyc2VyRWxlbWVudC5zY2FuU3RyaW5nYwIAAAAAAAAAAAAAAAgAAAAKAAAAQwAAAHPiAAAAZwB9AmQBfQNkAnwAXwB6nHwAoAF8AaEBRABdWlwDfQR9BX0GfAKgAnwBfAN8BYUCGQChAQEAfARycHQDfAR0BIMCclJ8AnwEoAWhADcAfQJuHnQDfAR0BoMCcmZ8AnwENwB9Am4KfAKgAnwEoQEBAHwGfQNxGnwCoAJ8AXwDZAOFAhkAoQEBAGQEZAWEAHwCRACDAX0CZAagB3QIdAl0CnwCgwGDAqEBVwBTAAQAdAt53AEAfQcBAHoadAxqDXLEggBuBHwHggFXAFkAZAN9B34HbgpkA30HfgcwADAAZANTACkHYWYDAAAKICAgICAgICBFeHRlbnNpb24gdG8gQ3tMe3NjYW5TdHJpbmd9fSwgdG8gbW9kaWZ5IG1hdGNoaW5nIHRleHQgd2l0aCBtb2RpZmllZCB0b2tlbnMgdGhhdCBtYXkKICAgICAgICBiZSByZXR1cm5lZCBmcm9tIGEgcGFyc2UgYWN0aW9uLiAgVG8gdXNlIEN7dHJhbnNmb3JtU3RyaW5nfSwgZGVmaW5lIGEgZ3JhbW1hciBhbmQKICAgICAgICBhdHRhY2ggYSBwYXJzZSBhY3Rpb24gdG8gaXQgdGhhdCBtb2RpZmllcyB0aGUgcmV0dXJuZWQgdG9rZW4gbGlzdC4KICAgICAgICBJbnZva2luZyBDe3RyYW5zZm9ybVN0cmluZygpfSBvbiBhIHRhcmdldCBzdHJpbmcgd2lsbCB0aGVuIHNjYW4gZm9yIG1hdGNoZXMsCiAgICAgICAgYW5kIHJlcGxhY2UgdGhlIG1hdGNoZWQgdGV4dCBwYXR0ZXJucyBhY2NvcmRpbmcgdG8gdGhlIGxvZ2ljIGluIHRoZSBwYXJzZQogICAgICAgIGFjdGlvbi4gIEN7dHJhbnNmb3JtU3RyaW5nKCl9IHJldHVybnMgdGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBzdHJpbmcuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIHdkID0gV29yZChhbHBoYXMpCiAgICAgICAgICAgIHdkLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0b2tzOiB0b2tzWzBdLnRpdGxlKCkpCiAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCh3ZC50cmFuc2Zvcm1TdHJpbmcoIm5vdyBpcyB0aGUgd2ludGVyIG9mIG91ciBkaXNjb250ZW50IG1hZGUgZ2xvcmlvdXMgc3VtbWVyIGJ5IHRoaXMgc3VuIG9mIHlvcmsuIikpCiAgICAgICAgUHJpbnRzOjoKICAgICAgICAgICAgTm93IElzIFRoZSBXaW50ZXIgT2YgT3VyIERpc2NvbnRlbnQgTWFkZSBHbG9yaW91cyBTdW1tZXIgQnkgVGhpcyBTdW4gT2YgWW9yay4KICAgICAgICByAQAAAFROYwEAAAAAAAAAAAAAAAIAAAADAAAAUwAAAHMUAAAAZwB8AF0MfQF8AXIEfAGRAnEEUwByeQAAAHJ5AAAAKQJyigAA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ICAgICAgIE5vdGUgdGhhdCBDe2V4cHIqKE5vbmUsbil9IGRvZXMgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZgogICAgICAgIG1vcmUgdGhhbiBuIGV4cHJzIGV4aXN0IGluIHRoZSBpbnB1dCBzdHJlYW07IHRoYXQgaXMsCiAgICAgICAgQ3tleHByKihOb25lLG4pfSBkb2VzIG5vdCBlbmZvcmNlIGEgbWF4aW11bSBudW1iZXIgb2YgZXhwcgogICAgICAgIG9jY3VycmVuY2VzLiAgSWYgdGhpcyBiZWhhdmlvciBpcyBkZXNpcmVkLCB0aGVuIHdyaXRlCiAgICAgICAgQ3tleHByKihOb25lLG4pICsgfmV4cHJ9CiAgICAgICAgcgEAAAApAk5OTnJzAAAAco0AAAB6N2Nhbm5vdCBtdWx0aXBseSAnUGFyc2VyRWxlbWVudCcgYW5kICgnJXMnLCclcycpIG9iamVjdHN6MGNhbm5vdCBtdWx0aXBseSAnUGFyc2VyRWxlbWVudCcgYW5kICclcycgb2JqZWN0c3ovY2Fubm90IG11bHRpcGx5IFBhcnNlckVsZW1lbnQgYnkgbmVnYXRpdmUgdmFsdWV6QHNlY29uZCB0dXBsZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gZmlyc3QgdHVwbGUgdmFsdWV6K2Nhbm5vdCBtdWx0aXBseSBQYXJzZXJFbGVtZW50IGJ5IDAgb3IgKDAsMCljAQAAAAAAAAAAAAAAAQAAAAUAAAATAAAAcygAAAB8AGQBawRyHHQAiAGIAHwAZAEYAIMBFwCDAVMAdACIAYMBUwBkAFMActwBAAApAXIdAAAAqQHaAW6pAtoQbWFrZU9wdGlvbmFsTGlzdHKrAAAAcnkAAAByegAAAHI+AgAAhgcAAHMGAAAAAAEIARQCei9QYXJzZXJFbGVtZW50Ll9fbXVsX18uPGxvY2Fscz4ubWFrZU9wdGlvbmFsTGlzdCkJcn0AAABydgAAANoFdHVwbGVyNAAAAHIbAAAAcusAAABywQAAANoKVmFsdWVFcnJvcnIIAAAAKQVyqwAAAHIrAQAA2gttaW5FbGVtZW50c9oLb3B0RWxlbWVudHNyhwAAAHJ5AAAAcj0CAAByegAAANoHX19tdWxfX1UH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ZCIpCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpLnNldE5hbWUoIm51bXdvcmQiKQogICAgICAgICAgICB0ZXJtID0gd2QgfCBpbnRlZ2VyCiAgICAgICAgICAgIAogICAgICAgICAgICAjIHR1cm4gb24gZGVidWdnaW5nIGZvciB3ZAogICAgICAgICAgICB3ZC5zZXREZWJ1ZygpCgogICAgICAgICAgICBPbmVPck1vcmUodGVybSkucGFyc2VTdHJpbmcoImFiYyAxMjMgeHl6IDg5MCIpCiAgICAgICAgCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAwKDEsMSkKICAgICAgICAgICAgTWF0Y2hlZCBhbHBoYXdvcmQgLT4gWydhYmMnXQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDMoMSw0KQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciA0KSwgKGxpbmU6MSwgY29sOjUpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgNygxLDgpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsneHl6J10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxMSgxLDEyKQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxMiksIChsaW5lOjEsIGNvbDoxMykKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxNSgxLDE2KQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxNSksIChsaW5lOjEsIGNvbDoxNikKCiAgICAgICAgVGhlIG91dHB1dCBzaG93biBpcyB0aGF0IHByb2R1Y2VkIGJ5IHRoZSBkZWZhdWx0IGRlYnVnIGFjdGlvbnMgLSBjdXN0b20gZGVidWcgYWN0aW9ucyBjYW4gYmUKICAgICAgICBzcGVjaWZpZWQgdXNpbmcgTHtzZXREZWJ1Z0FjdGlvbnN9LiBQcmlvciB0byBhdHRlbXB0aW5nCiAgICAgICAgdG8gbWF0Y2ggdGhlIEN7d2R9IGV4cHJlc3Npb24sIHRoZSBkZWJ1Z2dpbmcgbWVzc2FnZSBDeyJNYXRjaCA8ZXhwcm5hbWU+IGF0IGxvYyA8bj4oPGxpbmU+LDxjb2w+KSJ9CiAgICAgICAgaXMgc2hvd24uIFRoZW4gaWYgdGhlIHBhcnNlIHN1Y2NlZWRzLCBhIEN7Ik1hdGNoZWQifSBtZXNzYWdlIGlzIHNob3duLCBvciBhbiBDeyJFeGNlcHRpb24gcmFpc2VkIn0KICAgICAgICBtZXNzYWdlIGlzIHNob3duLiBBbHNvIG5vdGUgdGhlIHVzZSBvZiBMe3NldE5hbWV9IHRvIGFzc2lnbiBhIGh1bWFuLXJlYWRhYmxlIG5hbWUgdG8gdGhlIGV4cHJlc3Npb24sCiAgICAgICAgd2hpY2ggbWFrZXMgZGVidWdnaW5nIGFuZCBleGNlcHRpb24gbWVzc2FnZXMgZWFzaWVyIHRvIHVuZGVyc3RhbmQgLSBmb3IgaW5zdGFuY2UsIHRoZSBkZWZhdWx0CiAgICAgICAgbmFtZSBjcmVhdGVkIGZvciB0aGUgQ3tXb3JkfSBleHByZXNzaW9uIHdpdGhvdXQgY2FsbGluZyBDe3NldE5hbWV9IGlzIEN7Ilc6KEFCQ0QuLi4pIn0uCiAgICAgICAgRikFclYCAABydwEAAHJ7AQAAcn0BAAByrQEAACkCcqsAAADaBGZsYWdyeQAAAHJ5AAAAcnoAAADaCHNldERlYnVnQAgAAHMIAAAAACMEARACBgF6FlBhcnNlckVsZW1lbnQuc2V0RGVidWdjAQAAAAAAAAAAAAAAAQAAAAEAAABDAAAAcwYAAAB8AGoAUwByiQAAACkBctoAAABytQAAAHJ5AAAAcnkAAAByegAAAHK2AAAAaQgAAHMCAAAAAAF6FVBhcnNlckVsZW1lbnQuX19zdHJfX2MBAAAAAAAAAAAAAAABAAAAAgAAAEMAAABzCAAAAHQAfACDAVMAcokAAABytwAAAHK1AAAAcnkAAAByeQAAAHJ6AAAAcrgAAABsCAAAcwIAAAAAAXoWUGFyc2VyRWxlbWVudC5fX3JlcHJfX2MBAAAAAAAAAAAAAAABAAAAAgAAAEMAAABzEAAAAGQBfABfAGQAfABfAXwAUwBy1QAAACkCcq4BAABypAEAAHK1AAAAcnkAAAByeQAAAHJ6AAAAchoCAABvCAAAcwYAAAAAAQYBBgF6GFBhcnNlckVsZW1lbnQuc3RyZWFtbGluZWMCAAAAAAAAAAAAAAACAAAAAQAAAEMAAABzBAAAAGQAUwByiQAAAHJ5AAAAcsgAAAByeQAAAHJ5AAAAcnoAAADaDmNoZWNrUmVjdXJzaW9udAgAAHMCAAAAAAF6HFBhcnNlckVsZW1lbnQuY2hlY2tSZWN1cnNpb25jAgAAAAAAAAAAAAAAAgAAAAMAAABDAAAAcw4AAAB8AKAAZwChAQEAZAFTACkCemoKICAgICAgICBDaGVjayBkZWZpbmVkIGV4cHJlc3Npb25zIGZvciB2YWxpZCBzdHJ1Y3R1cmUsIGNoZWNrIGZvciBpbmZpbml0ZSByZWN1cnNpdmUgZGVmaW5pdGlvbnMuCiAgICAgICAgTikBclkCAAApAnKrAAAA2g12YWxpZGF0ZVRyYWNlcnkAAAByeQAAAHJ6AAAA2gh2YWxpZGF0ZXcIAABzAgAAAAAEehZQYXJzZXJFbGVtZW50LnZhbGlkYXRlYwMAAAAAAAAAAAAAAAYAAAALAAAAQwAAAHOYAAAAegx8AaAAoQB9A1cAbkQEAHQBeVABAAEAAQB0AnwBZAGDAo8YfQR8BKAAoQB9A1cAZAIEAAQAgwMBAG4QMQBzQjAAAQABAAEAWQABAFkAbgIwAHoOfACgA3wDfAKhAlcAUwAEAHQEeZIBAH0FAQB6GnQFagZyeoIAbgR8BYIBVwBZAGQCfQV+BW4KZAJ9BX4FMAAwAGQCUwApA3rQCiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiBvbiB0aGUgZ2l2ZW4gZmlsZSBvciBmaWxlbmFtZS4KICAgICAgICBJZiBhIGZpbGVuYW1lIGlzIHNwZWNpZmllZCAoaW5zdGVhZCBvZiBhIGZpbGUgb2JqZWN0KSwKICAgICAgICB0aGUgZW50aXJlIGZpbGUgaXMgb3BlbmVkLCByZWFkLCBhbmQgY2xvc2VkIGJlZm9yZSBwYXJzaW5nLgogICAgICAgINoBck4pB9oEcmVhZHKyAAAA2gRvcGVuch8CAAByHwAAAHImAAAAchwCAAApBnKrAAAA2hBmaWxlX29yX2ZpbGVuYW1lch0CAADaDWZpbGVfY29udGVudHPaAWZyfAEAAHJ5AAAAcnkAAAByegAAANoJcGFyc2VGaWxlfQgAAHMWAAAAAAYCAQwBDAEMASwBAgEOAQ4BBgEEA3oXUGFyc2VyRWxlbWVudC5wYXJzZUZpbGVjAgAAAAAAAAAAAAAAAgAAAAMAAAADAAAAc0gAAAB0AHwBdAGDAnIifAB8AXUAcCB0AnwAgwF0AnwBgwFrAlMAdAB8AXQDgwJyNnwAoAR8AaEBUwB0BXQBfACDAnwBawJTAGQAUwByiQAAACkGcn0AAAByJgAAANoEdmFyc3LoAAAAciUCAADaBXN1cGVycjcBAACpAXKUAQAAcnkAAAByegAAANoGX19lcV9fkQgAAHMKAAAAAAEKARgBCgEKAnoUUGFyc2VyRWxlbWVudC5fX2VxX19jAgAAAAAAAAAAAAAAAgAAAAIAAABDAAAAcwoAAAB8AHwBawIMAFMAcokAAAByeQAAAHI3AQAAcnkAAAByeQAAAHJ6AAAA2gZfX25lX1+ZCAAAcwIAAAAAAXoUUGFyc2VyRWxlbWVudC5fX25lX19jAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcwwAAAB0AHQBfACDAYMBUwByiQAAACkC2gRoYXNo2gJpZHK1AAAAcnkAAAByeQAAAHJ6AAAA2ghfX2hhc2hfX5wIAABzAgAAAAABehZQYXJzZXJFbGVtZW50Ll9faGFzaF9fYwIAAAAAAAAAAAAAAAIAAAACAAAAQwAAAHMIAAAAfAB8AWsCUwByiQAAAHJ5AAAAcjcBAAByeQAAAHJ5AAAAcnoAAADaB19fcmVxX1+fCAAAcwIAAAAAAXoVUGFyc2VyRWxlbWVudC5fX3JlcV9fYwIAAAAAAAAAAAAAAAIAAAACAAAAQwAAAHMKAAAAfAB8AWsCDABTAHKJAAAAcnkAAAByNwEAAHJ5AAAAcnkAAAByegAAANoHX19ybmVfX6IIAABzAgAAAAABehVQYXJzZXJFbGVtZW50Ll9fcm5lX19jAwAAAAAAAAAAAAAAAwAAAAgAAABDAAAAczIAAAB6GHwAagB0AXwBgwF8AmQBjQIBAFcAZAJTAAQAdAJ5LAEAAQABAFkAZANTADAAZARTACkFYdMBAAAKICAgICAgICBNZXRob2QgZm9yIHF1aWNrIHRlc3Rpbmcgb2YgYSBwYXJzZXIgYWdhaW5zdCBhIHRlc3Qgc3RyaW5nLiBHb29kIGZvciBzaW1wbGUgCiAgICAgICAgaW5saW5lIG1pY3JvdGVzdHMgb2Ygc3ViIGV4cHJlc3Npb25zIHdoaWxlIGJ1aWxkaW5nIHVwIGxhcmdlciBwYXJzZXIuCiAgICAgICAgICAgCiAgICAgICAgUGFyYW1ldGVyczoKICAgICAgICAgLSB0ZXN0U3RyaW5nIC0gdG8gdGVzdCBhZ2FpbnN0IHRoaXMgZXhwcmVzc2lvbiBmb3IgYSBtYXRjaAogICAgICAgICAtIHBhcnNlQWxsIC0gKGRlZmF1bHQ9Q3tUcnVlfSkgLSBmbGFnIHRvIHBhc3MgdG8gQ3tMe3BhcnNlU3RyaW5nfX0gd2hlbiBydW5uaW5nIHRlc3RzCiAgICAgICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBleHByID0gV29yZChudW1zKQogICAgICAgICAgICBhc3NlcnQgZXhwci5tYXRjaGVzKCIxMDAiKQogICAgICAgIKkBch0CAABURk4pA3IfAgAAcogAAAByHwAAACkDcqsAAADaCnRlc3RTdHJpbmdyHQIAAHJ5AAAAcnkAAAByegAAAHIlAgAApQgAAHMKAAAAAA0CARIBBgEMAXoVUGFyc2VyRWxlbWVudC5tYXRjaGVz+gEjYwcAAAAAAAAAAAAAABAAAAALAAAAQwAAAHP2AQAAdAB8AXQBgwJyInQCdAN0BGoFfAGgBqEAoAehAIMCgwF9AXQAfAN0AYMCcjR0CHwDgwF9A2cAfQdnAH0IZAF9CXwBRACQAV2mfQp8A2QCdQFyXnwDoAl8CmQDoQJzZnwIcnJ8CnNyfAigCnwKoQEBAHFEfApzeHFEZASgC3wIoQF8CmcCfQtnAH0Iejp8CqAMZAVkBKECfQp8AGoNfAp8AmQGjQJ9DHwLoAp8DGoOfARkB40BoQEBAHwJb8B8BgwAfQlXAG70BAB0D5ABeXQBAH0NAQB6lnQAfA10EIMCcuRkCG4CZAl9DmQEfAp2AJABcih8C6AKdBF8DWoSfAqDAqEBAQB8C6AKZAp0E3wNahJ8CoMCZAsYABQAZAwXAHwOFwChAQEAbhh8C6AKZAp8DWoSFABkDBcAfA4XAKEBAQB8C6AKZA10BHwNgwEXAKEBAQB8CZABb1p8Bn0JfA19DFcAWQBkAn0Nfg1uTmQCfQ1+DTAABAB0FJABebgBAH0PAQB6LHwLoApkDnQEfA+DARcAoQEBAHwJkAFvnnwGfQl8D30MVwBZAGQCfQ9+D24KZAJ9D34PMAAwAHwFkAFy3nwEkAFy0HwLoApkCaEBAQB0FWQEoAt8C6EBgwEBAHwHoAp8CnwMZgKhAQEAcUR8CXwHZgJTACkPYTMMAAAKICAgICAgICBFeGVjdXRlIHRoZSBwYXJzZSBleHByZXNzaW9uIG9uIGEgc2VyaWVzIG9mIHRlc3Qgc3RyaW5ncywgc2hvd2luZyBlYWNoCiAgICAgICAgdGVzdCwgdGhlIHBhcnNlZCByZXN1bHRzIG9yIHdoZXJlIHRoZSBwYXJzZSBmYWlsZWQuIFF1aWNrIGFuZCBlYXN5IHdheSB0bwogICAgICAgIHJ1biBhIHBhcnNlIGV4cHJlc3Npb24gYWdhaW5zdCBhIGxpc3Qgb2Ygc2FtcGxlIHN0cmluZ3MuCiAgICAgICAgICAgCiAgICAgICAgUGFyYW1ldGVyczoKICAgICAgICAgLSB0ZXN0cyAtIGEgbGlzdCBvZiBzZXBhcmF0ZSB0ZXN0IHN0cmluZ3MsIG9yIGEgbXVsdGlsaW5lIHN0cmluZyBvZiB0ZXN0IHN0cmluZ3MKICAgICAgICAgLSBwYXJzZUFsbCAtIChkZWZhdWx0PUN7VHJ1ZX0pIC0gZmxhZyB0byBwYXNzIHRvIEN7THtwYXJzZVN0cmluZ319IHdoZW4gcnVubmluZyB0ZXN0cyAgICAgICAgICAgCiAgICAgICAgIC0gY29tbWVudCAtIChkZWZhdWx0PUN7JyMnfSkgLSBleHByZXNzaW9uIGZvciBpbmRpY2F0aW5nIGVtYmVkZGVkIGNvbW1lbnRzIGluIHRoZSB0ZXN0IAogICAgICAgICAgICAgIHN0cmluZzsgcGFzcyBOb25lIHRvIGRpc2FibGUgY29tbWVudCBmaWx0ZXJpbmcKICAgICAgICAgLSBmdWxsRHVtcCAtIChkZWZhdWx0PUN7VHJ1ZX0pIC0gZHVtcCByZXN1bHRzIGFzIGxpc3QgZm9sbG93ZWQgYnkgcmVzdWx0cyBuYW1lcyBpbiBuZXN0ZWQgb3V0bGluZTsKICAgICAgICAgICAgICBpZiBGYWxzZSwgb25seSBkdW1wIG5lc3RlZCBsaXN0CiAgICAgICAgIC0gcHJpbnRSZXN1bHRzIC0gKGRlZmF1bHQ9Q3tUcnVlfSkgcHJpbnRzIHRlc3Qgb3V0cHV0IHRvIHN0ZG91dAogICAgICAgICAtIGZhaWx1cmVUZXN0cyAtIChkZWZhdWx0PUN7RmFsc2V9KSBpbmRpY2F0ZXMgaWYgdGhlc2UgdGVzdHMgYXJlIGV4cGVjdGVkIHRvIGZhaWwgcGFyc2luZwoKICAgICAgICBSZXR1cm5zOiBhIChzdWNjZXNzLCByZXN1bHRzKSB0dXBsZSwgd2hlcmUgc3VjY2VzcyBpbmRpY2F0ZXMgdGhhdCBhbGwgdGVzdHMgc3VjY2VlZGVkCiAgICAgICAgKG9yIGZhaWxlZCBpZiBDe2ZhaWx1cmVUZXN0c30gaXMgVHJ1ZSksIGFuZCB0aGUgcmVzdWx0cyBjb250YWluIGEgbGlzdCBvZiBsaW5lcyBvZiBlYWNoIAogICAgICAgIHRlc3QncyBvdXRwdXQKICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgbnVtYmVyX2V4cHIgPSBweXBhcnNpbmdfY29tbW9uLm51bWJlci5jb3B5KCkKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyB1bnNpZ25lZCBpbnRlZ2VyCiAgICAgICAgICAgICAgICAxMDAKICAgICAgICAgICAgICAgICMgbmVnYXRpdmUgaW50ZWdlcgogICAgICAgICAgICAgICAgLTEwMAogICAgICAgICAgICAgICAgIyBmbG9hdCB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgICAgICMgaW50ZWdlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICAgICAnJycpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCgogICAgICAgICAgICByZXN1bHQgPSBudW1iZXJfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgICAgICMgc3RyYXkgY2hhcmFjdGVyCiAgICAgICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgICAjIG1pc3NpbmcgbGVhZGluZyBkaWdpdCBiZWZvcmUgJy4nCiAgICAgICAgICAgICAgICAtLjEwMAogICAgICAgICAgICAgICAgIyB0b28gbWFueSAnLicKICAgICAgICAgICAgICAgIDMuMTQuMTU5CiAgICAgICAgICAgICAgICAnJycsIGZhaWx1cmVUZXN0cz1UcnVlKQogICAgICAgICAgICBwcmludCgiU3VjY2VzcyIgaWYgcmVzdWx0WzBdIGVsc2UgIkZhaWxlZCEiKQogICAgICAgIHByaW50czo6CiAgICAgICAgICAgICMgdW5zaWduZWQgaW50ZWdlcgogICAgICAgICAgICAxMDAKICAgICAgICAgICAgWzEwMF0KCiAgICAgICAgICAgICMgbmVnYXRpdmUgaW50ZWdlcgogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgIFstMTAwXQoKICAgICAgICAgICAgIyBmbG9hdCB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgICAgICAjIGludGVnZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgIFsxZS0xMl0KCiAgICAgICAgICAgIFN1Y2Nlc3MKICAgICAgICAgICAgCiAgICAgICAgICAgICMgc3RyYXkgY2hhcmFjdGVyCiAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciAzKSwgKGxpbmU6MSwgY29sOjQpCgogICAgICAgICAgICAj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c21hdGNoZXMgd2VyZSBmb3VuZAogICAgIC0gQ3tvcmlnaW5hbH0gLSB0aGUgb3JpZ2luYWwgbWF0Y2hfc3RyaW5nIHVzZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSBpbnB1dCBzdHJpbmcKICAgIAogICAgSWYgQ3ttaXNtYXRjaGVzfSBpcyBhbiBlbXB0eSBsaXN0LCB0aGVuIHRoZSBtYXRjaCB3YXMgYW4gZXhhY3QgbWF0Y2guCiAgICAKICAgIEV4YW1wbGU6OgogICAgICAgIHBhdHQgPSBDbG9zZU1hdGNoKCJBVENBVENHQUFUR0dBIikKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBVENHQUFYR0dBIikgIyAtPiAoWydBVENBVENHQUFYR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbOV1dLCAnb3JpZ2luYWwnOiBbJ0FUQ0FUQ0dBQVRHR0EnXX0pCiAgICAgICAgcGF0dC5wYXJzZVN0cmluZygiQVRDQVhDR0FBWEdHQSIpICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCAnQVRDQVRDR0FBVEdHQScgKHdpdGggdXAgdG8gMSBtaXNtYXRjaGVzKSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCgogICAgICAgICMgZXhhY3QgbWF0Y2gKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBVENHQUFUR0dBIikgIyAtPiAoWydBVENBVENHQUFUR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbXV0sICdvcmlnaW5hbCc6IFsnQVRDQVRDR0FBVEdHQSddfSkKCiAgICAgICAgIyBjbG9zZSBtYXRjaCBhbGxvd2luZyB1cCB0byAyIG1pc21hdGNoZXMKICAgICAgICBwYXR0ID0gQ2xvc2VNYXRjaCgiQVRDQVRDR0FBVEdHQSIsIG1heE1pc21hdGNoZXM9MikKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBWENHQUFYR0dBIikgIyAtPiAoWydBVENBWENHQUFYR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbNCwgOV1dLCAnb3JpZ2luYWwnOiBbJ0FUQ0FUQ0dBQVRHR0EnXX0pCiAgICByjQAAAGMDAAAAAAAAAAAAAAADAAAAAwAAAAMAAABzQgAAAHQAdAF8AIMCoAKhAAEAfAF8AF8DfAF8AF8EfAJ8AF8FZAF8AGoEfABqBWYCFgB8AF8GZAJ8AF8HZAJ8AF8IZABTACkDTnomRXhwZWN0ZWQgJXIgKHdpdGggdXAgdG8gJWQgbWlzbWF0Y2hlcylGKQlyZAIAAHJuAAAAcq0AAABy2gAAANoMbWF0Y2hfc3RyaW5n2g1tYXhNaXNtYXRjaGVzcrABAAByrwEAAHKqAQAAKQNyqwAAAHKWAgAAcpcCAAByZQIAAHJ5AAAAcnoAAAByrQAAAAoKAABzDgAAAAABDgEGAQYBBgESAQYBehNDbG9zZU1hdGNoLl9faW5pdF9fVGMEAAAAAAAAAAAAAAAPAAAABQAAAEMAAABzygAAAHwCfQR0AHwBgwF9BXwEdAB8AGoBgwEXAH0GfAZ8BWsBcrZ8AGoBfQdkAX0IZwB9CXwAagJ9CnQDdAR8AXwCfAaFAhkAfABqAYMCgwFEAF0yXAJ9CH0LfAtcAn0MfQ18DHwNawNyTnwJoAV8CKEBAQB0AHwJgwF8CmsEck4BAHG2cU58CGQCFwB9AnQGfAF8BHwChQIZAGcBgwF9DnwAagF8DmQDPAB8CXwOZAQ8AHwCfA5mAlMAdAd8AXwCfABqCHwAgwSCAWQAUwApBU5yAQAAAHKNAAAA2ghvcmlnaW5hbNoKbWlzbWF0Y2hlcykJcvgAAABylgIAAHKXAgAAcv0AAABykgAAAHIkAQAAciQAAAByIQAAAHKwAQAAKQ9yqwAAAHJ1AQAAcqYAAABywgEAANoFc3RhcnRy3gEAANoGbWF4bG9jcpYCAADaD21hdGNoX3N0cmluZ2xvY3KZAgAAcpcCAADaA3NfbdoDc3Jj2gNtYXTaB3Jlc3VsdHNyeQAAAHJ5AAAAcnoAAABy4QEAABMKAABzKAAAAAABBAEIAQ4CCAEGAQQBBAEGAiABCAEIAQoBDAEGAggBEgEKAQgBCAJ6FENsb3NlTWF0Y2gucGFyc2VJbXBsKQFyjQAAACkBVHKFAgAAcnkAAAByeQAAAHJlAgAAcnoAAABybgAAAPEJAABzBgAAAAgBBBgOCXJuAAAAYwAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAHM4AAAAZQBaAWQAWgJkAVoDZA2HAGYBZAZkB4QJWgRkDmQJZAqEAVoFhwBmAWQLZAyECFoGhwAEAFoHUwApD3IxAAAAYRQJAAAKICAgIFRva2VuIGZvciBtYXRjaGluZyB3b3JkcyBjb21wb3NlZCBvZiBhbGxvd2VkIGNoYXJhY3RlciBzZXRzLgogICAgRGVmaW5lZCB3aXRoIHN0cmluZyBjb250YWluaW5nIGFsbCBhbGxvd2VkIGluaXRpYWwgY2hhcmFjdGVycywKICAgIGFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIGFsbG93ZWQgYm9keSBjaGFyYWN0ZXJzIChpZiBvbWl0dGVkLAogICAgZGVmYXVsdHMgdG8gdGhlIGluaXRpYWwgY2hhcmFjdGVyIHNldCksIGFuZCBhbiBvcHRpb25hbCBtaW5pbXVtLAogICAgbWF4aW11bSwgYW5kL29yIGV4YWN0IGxlbmd0aC4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBDe21pbn0gaXMgMSAoYQogICAgbWluaW11bSB2YWx1ZSA8IDEgaXMgbm90IHZhbGlkKTsgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBDe21heH0gYW5kIEN7ZXhhY3R9CiAgICBhcmUgMCwgbWVhbmluZyBubyBtYXhpbXVtIG9yIGV4YWN0IGxlbmd0aCByZXN0cmljdGlvbi4gQW4gb3B0aW9uYWwKICAgIEN7ZXhjbHVkZUNoYXJzfSBwYXJhbWV0ZXIgY2FuIGxpc3QgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGJlIGZvdW5kIGluIAogICAgdGhlIGlucHV0IEN7Ym9keUNoYXJzfSBzdHJpbmc7IHVzZWZ1bCB0byBkZWZpbmUgYSB3b3JkIG9mIGFsbCBwcmludGFibGVzCiAgICBleGNlcHQgZm9yIG9uZSBvciB0d28gY2hhcmFjdGVycywgZm9yIGluc3RhbmNlLgogICAgCiAgICBMe3NyYW5nZX0gaXMgdXNlZnVsIGZvciBkZWZpbmluZyBjdXN0b20gY2hhcmFjdGVyIHNldCBzdHJpbmdzIGZvciBkZWZpbmluZyAKICAgIEN7V29yZH0gZXhwcmVzc2lvbnMsIHVzaW5nIHJhbmdlIG5vdGF0aW9uIGZyb20gcmVndWxhciBleHByZXNzaW9uIGNoYXJhY3RlciBzZXRzLgogICAgCiAgICBBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHVzZSBDe1dvcmR9IHRvIG1hdGNoIGEgc3BlY2lmaWMgbGl0ZXJhbCBzdHJpbmcsIGFzIGluIAogICAgQ3tXb3JkKCJBZGRyZXNzIil9LiBSZW1lbWJlciB0aGF0IEN7V29yZH0gdXNlcyB0aGUgc3RyaW5nIGFyZ3VtZW50IHRvIGRlZmluZQogICAgSXtzZXRzfSBvZiBtYXRjaGFibGUgY2hhcmFjdGVycy4gVGhpcyBleHByZXNzaW9uIHdvdWxkIG1hdGNoICJBZGQiLCAiQUFBIiwKICAgICJkQXJlZCIsIG9yIGFueSBvdGhlciB3b3JkIG1hZGUgdXAgb2YgdGhlIGNoYXJhY3RlcnMgJ0EnLCAnZCcsICdyJywgJ2UnLCBhbmQgJ3MnLgogICAgVG8gbWF0Y2ggYW4gZXhhY3QgbGl0ZXJhbCBzdHJpbmcsIHVzZSBMe0xpdGVyYWx9IG9yIEx7S2V5d29yZH0uCgogICAgcHlwYXJzaW5nIGluY2x1ZGVzIGhlbHBlciBzdHJpbmdzIGZvciBidWlsZGluZyBXb3JkczoKICAgICAtIEx7YWxwaGFzfQogICAgIC0gTHtudW1zfQogICAgIC0gTHthbHBoYW51bXN9CiAgICAgLSBMe2hleG51bXN9CiAgICAgLSBMe2FscGhhczhiaXR9IChhbHBoYWJldGljIGNoYXJhY3RlcnMgaW4gQVNDSUkgcmFuZ2UgMTI4LTI1NSAtIGFjY2VudGVkLCB0aWxkZWQsIHVtbGF1dGVkLCBldGMuKQogICAgIC0gTHtwdW5jOGJpdH0gKG5vbi1hbHBoYWJldGljIGNoYXJhY3RlcnMgaW4gQVNDSUkgcmFuZ2UgMTI4LTI1NSAtIGN1cnJlbmN5LCBzeW1ib2xzLCBzdXBlcnNjcmlwdHMsIGRpYWNyaXRpY2FscywgZXRjLikKICAgICAtIEx7cHJpbnRhYmxlc30gKGFueSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIpCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBhIHdvcmQgY29tcG9zZWQgb2YgZGlnaXRzCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVt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bWF0Y2hpbmcgc3RyaW5ncyB0aGF0IGFyZSBkZWxpbWl0ZWQgYnkgcXVvdGluZyBjaGFyYWN0ZXJzLgogICAgCiAgICBEZWZpbmVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgogICAgICAgIC0gcXVvdGVDaGFyIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlIHF1b3RlIGRlbGltaXRpbmcgc3RyaW5nCiAgICAgICAgLSBlc2NDaGFyIC0gY2hhcmFjdGVyIHRvIGVzY2FwZSBxdW90ZXMsIHR5cGljYWxseSBiYWNrc2xhc2ggKGRlZmF1bHQ9Q3tOb25lfSkKICAgICAgICAtIGVzY1F1b3RlIC0gc3BlY2lhbCBxdW90ZSBzZXF1ZW5jZSB0byBlc2NhcGUgYW4gZW1iZWRkZWQgcXVvdGUgc3RyaW5nIChzdWNoIGFzIFNRTCdzICIiIHRvIGVzY2FwZSBhbiBlbWJlZGRlZCAiKSAoZGVmYXVsdD1De05vbmV9KQogICAgICAgIC0gbXVsdGlsaW5lIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgcXVvdGVzIGNhbiBzcGFuIG11bHRpcGxlIGxpbmVzIChkZWZhdWx0PUN7RmFsc2V9KQogICAgICAgIC0gdW5xdW90ZVJlc3VsdHMgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWF0Y2hlZCB0ZXh0IHNob3VsZCBiZSB1bnF1b3RlZCAoZGVmYXVsdD1De1RydWV9KQogICAgICAgIC0gZW5kUXVvdGVDaGFyIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlIGVuZCBvZiB0aGUgcXVvdGUgZGVsaW1pdGVkIHN0cmluZyAoZGVmYXVsdD1De05vbmV9ID0+IHNhbWUgYXMgcXVvdGVDaGFyKQogICAgICAgIC0gY29udmVydFdoaXRlc3BhY2VFc2NhcGVzIC0gY29udmVydCBlc2NhcGVkIHdoaXRlc3BhY2UgKEN7J1x0J30sIEN7J1xuJ30sIGV0Yy4pIHRvIGFjdHVhbCB3aGl0ZXNwYWNlIChkZWZhdWx0PUN7VHJ1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R09OIE9DVEFHT04iKQogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgc2hhcGVfYXR0ciA9ICJzaGFwZToiICsgc2hhcGVfdHlwZSgic2hhcGUiKQogICAgICAgIHBvc25fYXR0ciA9ICJwb3NuOiIgKyBHcm91cChpbnRlZ2VyKCJ4IikgKyAnLCcgKyBpbnRlZ2VyKCJ5IikpKCJwb3NuIikKICAgICAgICBjb2xvcl9hdHRyID0gImNvbG9yOiIgKyBjb2xvcigiY29sb3IiKQogICAgICAgIHNpemVfYXR0ciA9ICJzaXplOiIgKyBpbnRlZ2VyKCJzaXplIikKCiAgICAgICAgIyB1c2UgRWFjaCAodXNpbmcgb3BlcmF0b3IgJyYnKSB0byBhY2NlcHQgYXR0cmlidXRlcyBpbiBhbnkgb3JkZXIgCiAgICAgICAgIyAoc2hhcGUgYW5kIHBvc24gYXJlIHJlcXVpcmVkLCBjb2xvciBhbmQgc2l6ZSBhcmUgb3B0aW9uYWwpCiAgICAgICAgc2hhcGVfc3BlYyA9IHNoYXBlX2F0dHIgJiBwb3NuX2F0dHIgJiBPcHRpb25hbChjb2xvcl9hdHRyKSAmIE9wdGlvbmFsKHNpemVfYXR0cikKCiAgICAgICAgc2hhcGVfc3BlYy5ydW5UZXN0cygnJycKICAgICAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgICAgICBjb2xvcjpHUkVFTiBzaXplOjIwIHNoYXBlOlRSSUFOR0xFIHBvc246MjAsNDAKICAgICAgICAgICAgJycnCiAgICAgICAgICAgICkKICAgIHByaW50czo6CiAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICBbJ3NoYXBlOicsICdTUVVBUkUnLCAnY29sb3I6JywgJ0JMQUNLJywgJ3Bvc246JywgWycxMDAnLCAnLCcsICcxMjAnXV0KICAgICAgICAtIGNvbG9yOiBCTEFDSwogICAgICAgIC0gcG9zbjogWycxMDAnLCAnLCcsICcxMjAnXQogICAgICAgICAgLSB4OiAxMDAKICAgICAgICAgIC0geTogMTIwCiAgICAgICAgLSBzaGFwZTogU1FVQVJFCgoKICAgICAgICBzaGFwZTogQ0lSQ0xFIHNpemU6IDUwIGNvbG9yOiBCTFVFIHBvc246IDUwLDgwCiAgICAgICAgWydzaGFwZTonLCAnQ0lSQ0xFJywgJ3NpemU6JywgJzUwJywgJ2NvbG9yOicsICdCTFVFJywgJ3Bvc246JywgWyc1MCcsICcsJywgJzgwJ11dCiAgICAgICAgLSBjb2xvcjogQkxVRQogICAgICAgIC0gcG9zbjogWyc1MCcsICcsJywgJzgwJ10KICAgICAgICAgIC0geDogNTAKICAgICAgICAgIC0geTogODAKICAgICAgICAtIHNoYXBlOiBDSVJDTEUKICAgICAgICAtIHNpemU6IDUwCgoKICAgICAgICBjb2xvcjogR1JFRU4gc2l6ZTogMjAgc2hhcGU6IFRSSUFOR0xFIHBvc246IDIwLDQwCiAgICAgICAgWydjb2xvcjonLCAnR1JFRU4nLCAnc2l6ZTonLCAnMjAnLCAnc2hhcGU6JywgJ1RSSUFOR0xFJywgJ3Bvc246JywgWycyMCcsICcsJywgJzQwJ11dCiAgICAgICAgLSBjb2xvcjogR1JFRU4KICAgICAgICAtIHBvc246IFsnMjAnLCAnLCcsICc0MCddCiAgICAgICAgICAtIHg6IDIwCiAgICAgICAgICAtIHk6IDQwCiAgICAgICAgLSBzaGFwZTogVFJJQU5HTEUKICAgICAgICAtIHNpemU6IDIwCiAgICBUYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHM4AAAAdAB0AXwAgwKgAnwBfAKhAgEAdANkAWQChAB8AGoERACDAYMBfABfBWQDfABfBmQDfABfB2QAUwApBE5jAQAAAAAAAAAAAAAAAgAAAAIAAABzAAAAcxQAAAB8AF0MfQF8AWoAVgABAHECZABTAHKJAAAAcvMCAABy7wIAAHJ5AAAAcnkAAAByegAAAHKMAAAAPw4AAHJ8AAAAeiBFYWNoLl9faW5pdF9fLjxsb2NhbHM+LjxnZW5leHByPlQpCHJkAgAA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cxgAAABlAFoBZABaAmQBWgNkAmQDhABaBGQEUwApBXIbAAAAYYMEAAAKICAgIFJlcGV0aXRpb24gb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGdpdmVuIGV4cHJlc3Npb24uCiAgICAKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggb25lIG9yIG1vcmUgdGltZXMKICAgICAtIHN0b3BPbiAtIChkZWZhdWx0PUN7Tm9uZX0pIC0gZXhwcmVzc2lvbiBmb3IgYSB0ZXJtaW5hdGluZyBzZW50aW5lbAogICAgICAgICAgKG9ubHkgcmVxdWlyZWQgaWYgdGhlIHNlbnRpbmVsIHdvdWxkIG9yZGluYXJpbHkgbWF0Y2ggdGhlIHJlcGV0aXRpb24gCiAgICAgICAgICBleHByZXNzaW9uKSAgICAgICAgICAKCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IEJMQUNLIgogICAgICAgIE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLnBwcmludCgpICAjIEZhaWwhIHJlYWQgJ2NvbG9yJyBhcyBkYXRhIGluc3RlYWQgb2YgbmV4dCBsYWJlbCAtPiBbWydzaGFwZScsICdTUVVBUkUgY29sb3InXV0KCiAgICAgICAgIyB1c2Ugc3RvcE9uIGF0dHJpYnV0ZSBmb3IgT25lT3JNb3JlIHRvIGF2b2lkIHJlYWRpbmcgbGFiZWwgc3RyaW5nIGFzIHBhcnQgb2YgdGhlIGRhdGEKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBP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IHJlcG9ydCA9ICcnJwogICAgICAgICAgICBPdXRzdGFuZGluZyBJc3N1ZXMgUmVwb3J0IC0gMSBKYW4gMjAwMAoKICAgICAgICAgICAgICAgIyB8IFNldmVyaXR5IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRGF5cyBPcGVuCiAgICAgICAgICAgIC0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLQogICAgICAgICAgICAgMTAxIHwgQ3JpdGljYWwgfCBJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoICAgICAgICAgICAgICAgICB8ICAgICAgICAgIDYKICAgICAgICAgICAgICA5NCB8IENvc21ldGljIHwgU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpICAgICAgICAgfCAgICAgICAgIDE0CiAgICAgICAgICAgICAgNzkgfCBNaW5vciAgICB8IFN5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzIHwgICAgICAgICA0NwogICAgICAgICAgICAnJycKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIFNFUCA9IFN1cHByZXNzKCd8JykKICAgICAgICAjIHVzZSBTa2lwVG8gdG8gc2ltcGx5IG1hdGNoIGV2ZXJ5dGhpbmcgdXAgdW50aWwgdGhlIG5leHQgU0VQCiAgICAgICAgIyAtIGlnbm9yZSBxdW90ZWQgc3RyaW5ncywgc28gdGhhdCBhICd8JyBjaGFyYWN0ZXIgaW5zaWRlIGEgcXVvdGVkIHN0cmluZyBkb2VzIG5vdCBtYXRjaAogICAgICAgICMgLSBwYXJzZSBhY3Rpb24gd2lsbCBjYWxsIHRva2VuLnN0cmlwKCkgZm9yIGVhY2ggbWF0Y2hlZCB0b2tlbiwgaS5lLiwgdGhlIGRlc2NyaXB0aW9uIGJvZHkKICAgICAgICBzdHJpbmdfZGF0YSA9IFNraXBUbyhTRVAsIGlnbm9yZT1xdW90ZWRTdHJpbmcpCiAgICAgICAgc3RyaW5nX2RhdGEuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnN0cmlwKSkKICAgICAgICB0aWNrZXRfZXhwciA9IChpbnRlZ2VyKCJpc3N1ZV9udW0iKSArIFNFUCAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoInNldiIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgiZGVzYyIpICsgU0VQIAogICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyKCJkYXlzX29wZW4iKSkKICAgICAgICAKICAgICAgICBmb3IgdGt0IGluIHRpY2tldF9leHByLnNlYXJjaFN0cmluZyhyZXBvcnQpOgogICAgICAgICAgICBwcmludCB0a3QuZHVtcCgpCiAgICBwcmludHM6OgogICAgICAgIFsnMTAxJywgJ0NyaXRpY2FsJywgJ0ludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2gnLCAnNiddCiAgICAgICAgLSBkYXlzX29wZW46IDYKICAgICAgICAtIGRlc2M6IEludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2gKICAgICAgICAtIGlzc3VlX251bTogMTAxCiAgICAgICAgLSBzZXY6IENyaXRpY2FsCiAgICAgICAgWyc5NCcsICdDb3NtZXRpYycsICJTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykiLCAnMTQnXQogICAgICAgIC0gZGF5c19vcGVuOiAxNAogICAgICAgIC0gZGVzYzogU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpCiAgICAgICAgLSBpc3N1ZV9udW06IDk0CiAgICAgICAgLSBzZXY6IENvc21ldGljCiAgICAgICAgWyc3OScsICdNaW5vcicsICdTeXN0ZW0gc2xvdyB3aGVuIHJ1bm5pbmcgdG9vIG1hbnkgcmVwb3J0cycsICc0NyddCiAgICAgICAgLSBkYXlzX29wZW46IDQ3CiAgICAgICAgLSBkZXNjOiBTeXN0ZW0gc2xvdyB3aGVuIHJ1bm5pbmcgdG9vIG1hbnkgcmVwb3J0cwogICAgICAgIC0gaXNzdWVfbnVtOiA3OQogICAgICAgIC0gc2V2OiBNaW5vcgogICAgRk5jBQAAAAAAAAAAAAAABQAAAAMAAAADAAAAc2AAAAB0AHQBfACDAqACfAGhAQEAfAN8AF8DZAF8AF8EZAJ8AF8FfAJ8AF8GZAJ8AF8HdAh8BHQJgwJyRnQKoAt8BKEBfABfDG4GfAR8AF8MZAN0DXwAag6DARcAfABfD2QAUwApBE5URnoTTm8gbWF0Y2ggZm91bmQgZm9yICkQcmQCAAByKgAAAHKtAAAA2gppZ25vcmVFeHBycqoBAAByrwEAANoMaW5jbHVkZU1hdGNoctsAAAByfQAAAHLoAAAAciYAAAByoAEAANoGZmFpbE9ucogAAABydgEAAHKwAQAAKQVyqwAAAHIrAQAA2gdpbmNsdWRlclICAAByNAMAAHJlAgAAcnkAAAByegAAAHKtAAAA8Q8AAHMUAAAAAAEQAQYBBgEGAQYBBgEKAQ4CBgF6D1NraXBUby5fX2luaXRfX1RjBAAAAAAAAAAAAAAADgAAAAkAAABDAAAAcyIBAAB8An0EdAB8AYMBfQV8AGoBfQZ8AGoBagJ9B3wAagNkAHUBcix8AGoDagRuAmQAfQh8AGoFZAB1AXJCfABqBWoGbgJkAH0JfAJ9CnwKfAVrAXLOfAhkAHUBcmZ8CHwBfAqDAnJmcd58CWQAdQFylnoOfAl8AXwKgwJ9ClcAcW4EAHQHeZIBAAEAAQBZAHGWWQBxbjAAcW56FHwHfAF8CmQBZAFkAo0EAQBXAHHeBAB0CHQJZgJ5yAEAAQABAHwKZAM3AH0KWQBxSjAAcd5xSnQIfAF8AnwAagp8AIMEggF8Cn0CfAF8BHwChQIZAH0LdAt8C4MBfQx8AGoMkAFyGnwHfAF8AnwDZAFkBI0EXAJ9An0NfAx8DTcAfQx8AnwMZgJTACkFTkYpAnLCAQAAcsMBAAByjQAAAHIgAgAAKQ1y+AAAAHJ2AQAAcsgBAAByNAMAAHLuAQAAcjIDAABy7QEAAHIfAAAAciEAAABy7AAAAHKwAQAAciQAAAByMwMAACkOcqsAAABydQEAAHKmAAAAcsIBAAByeAEAAHLeAQAAcnYBAADaCmV4cHJfcGFyc2XaGHNlbGZfZmFpbE9uX2NhblBhcnNlTmV4dNoYc2VsZl9pZ25vcmVFeHByX3RyeVBhcnNl2gZ0bXBsb2PaCHNraXB0ZXh02gpza2lwcmVzdWx0cp8CAAByeQAAAHJ5AAAAcnoAAABy4QEAAP4PAABzOgAAAAABBAEIAQYBCAEWARYCBAEIAQgCCgECAggDAgEOAQwBDAICARQBEAIOAwQEEAMEAQwBCAIIARQBCAJ6EFNraXBUby5wYXJzZUltcGwpA0ZOTikBVHKFAgAAcnkAAAByeQAAAHJlAgAAcnoAAAByKgAAALoPAABzBgAAAAgBBDYODXIqAAAAYwAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAHNiAAAAZQBaAWQAWgJkAVoDZBOHAGYBZANkBIQJWgRkBWQGhABaBWQHZAiEAFoGZAlkCoQAWgdkC2QMhABaCGcAZgFkDWQOhAFaCWQPZBCEAFoKhwBmAWQRZBKECFoLhwAEAFoMUwApFHIRAAAAYUsDAAAKICAgIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgYW4gZXhwcmVzc2lvbiB0byBiZSBkZWZpbmVkIGxhdGVyIC0KICAgIHVzZWQgZm9yIHJlY3Vyc2l2ZSBncmFtbWFycywgc3VjaCBhcyBhbGdlYnJhaWMgaW5maXggbm90YXRpb24uCiAgICBXaGVuIHRoZSBleHByZXNzaW9uIGlzIGtub3duLCBpdCBpcyBhc3NpZ25lZCB0byB0aGUgQ3tGb3J3YXJkfSB2YXJpYWJsZSB1c2luZyB0aGUgJzw8JyBvcGVyYXRvci4KCiAgICBOb3RlOiB0YWtlIGNhcmUgd2hlbiBhc3NpZ25pbmcgdG8gQ3tGb3J3YXJkfSBub3QgdG8gb3Zlcmxvb2sgcHJlY2VkZW5jZSBvZiBvcGVyYXRvcnMuCiAgICBTcGVjaWZpY2FsbHksICd8JyBoYXMgYSBsb3dlciBwcmVjZWRlbmNlIHRoYW4gJzw8Jywgc28gdGhhdDo6CiAgICAgICAgZndkRXhwciA8PCBhIHwgYiB8IGMKICAgIHdpbGwgYWN0dWFsbHkgYmUgZXZhbHVhdGVkIGFzOjoKICAgICAgICAoZndkRXhwciA8PCBhKSB8IGIgfCBjCiAgICB0aGVyZWJ5IGxlYXZpbmcgYiBhbmQgYyBvdXQgYXMgcGFyc2VhYmxlIGFsdGVybmF0aXZlcy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91CiAgICBleHBsaWNpdGx5IGdyb3VwIHRoZSB2YWx1ZXMgaW5zZXJ0ZWQgaW50byB0aGUgQ3tGb3J3YXJkfTo6CiAgICAgICAgZndkRXhwciA8PCAoYSB8IGIgfCBjKQogICAgQ29udmVydGluZyB0byB1c2UgdGhlICc8PD0nIG9wZXJhdG9yIGluc3RlYWQgd2lsbCBhdm9pZCB0aGlzIHByb2JsZW0uCgogICAgU2VlIEx7UGFyc2VSZXN1bHRzLnBwcmludH0gZm9yIGFuIGV4YW1wbGUgb2YgYSByZWN1cnNpdmUgcGFyc2VyIGNyZWF0ZWQgdXNpbmcKICAgIEN7Rm9yd2FyZH0uCiAgICBOYwIAAAAAAAAAAAAAAAIAAAAEAAAAAwAAAHMYAAAAdAB0AXwAgwJqAnwBZAFkAo0CAQBkAFMAcoICAAApA3JkAgAAchEAAAByrQAAAHI3AQAAcmUCAAByeQAAAHJ6AAAAcq0AAABAEAAAcwIAAAAAAXoQRm9yd2FyZC5fX2luaXRfX2MCAAAAAAAAAAAAAAACAAAAAwAAAEMAAABzagAAAHQAfAF0AYMCchR0AqADfAGhAX0BfAF8AF8EZAB8AF8FfABqBGoGfABfBnwAagRqB3wAXwd8AKAIfABqBGoJoQEBAHwAagRqCnwAXwp8AGoEagt8AF8LfABqDKANfABqBGoMoQEBAHwAUwByiQAAACkOcn0AAABy6AAAAHImAAAAcqABAABydgEAAHKkAQAAcq8BAAByqgEAAHJQAgAAcqgBAABypwEAAHKmAQAAcqwBAAByJgEAAHI3AQAAcnkAAAByeQAAAHJ6AAAA2gpfX2xzaGlmdF9fQxAAAHMWAAAAAAEKAQoBBgEGAQoBCgEOAQoBCgEQAXoSRm9yd2FyZC5fX2xzaGlmdF9fYwIAAAAAAAAAAAAAAAIAAAACAAAAQwAAAHMIAAAAfAB8AT4AUwByiQAAAHJ5AAAAcjcBAAByeQAAAHJ5AAAAcnoAAADaC19faWxzaGlmdF9fUBAAAHMCAAAAAAF6E0ZvcndhcmQuX19pbHNoaWZ0X19jAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcwoAAABkAXwAXwB8AFMAcgACAAByTgIAAHK1AAAAcnkAAAByeQAAAHJ6AAAAck8CAABTEAAAcwQAAAAAAQYBehdGb3J3YXJkLmxlYXZlV2hpdGVzcGFjZWMBAAAAAAAAAAAAAAABAAAAAgAAAEMAAABzJAAAAHwAagBzIGQBfABfAHwAagFkAHUBciB8AGoBoAKhAAEAfABTAHLVAAAAKQNyrgEAAHJ2AQAAchoCAABytQAAAHJ5AAAAcnkAAAByegAAAHIaAgAAVxAAAHMKAAAAAAEGAQYBCgEKAXoSRm9yd2FyZC5zdHJlYW1saW5lYwIAAAAAAAAAAAAAAAMAAAADAAAAQwAAAHM+AAAAfAB8AXYBcjB8AWQAZACFAhkAfABnARcAfQJ8AGoAZAB1AXIwfABqAKABfAKhAQEAfACgAmcAoQEBAGQAUwByiQAAAHIgAwAAciEDAAByeQAAAHJ5AAAAcnoAAAByWwIAAF4QAABzCgAAAAABCAESAQoBDAF6EEZvcndhcmQudmFsaWRhdGVjAQAAAAAAAAAAAAAAAgAAAAMAAABDAAAAc14AAAB0AHwAZAGDAnIQfABqAVMAfABqAmoDZAIXAFMAeiZ8AGoGZAB1AXI0dAd8AGoGgwF9AW4EZAN9AVcAfABqBHwAXwJuCnwAagR8AF8CMAB8AGoCagNkBBcAfAEXAFMAKQVOctoAAAB6BTogLi4u2gROb25legI6ICkIcg8BAABy2gAAAHKUAQAAcpsAAADaDF9yZXZlcnRDbGFzc9oRX0ZvcndhcmROb1JlY3Vyc2VydgEAAHKIAAAAKQJyqwAAANoJcmV0U3RyaW5ncnkAAAByeQAAAHJ6AAAAcrYAAABlEAAAcxYAAAAAAQoBBgEMAwABAAECAQoBDAIGAhQBeg9Gb3J3YXJkLl9fc3RyX19jAQAAAAAAAAAAAAAAAgAAAAMAAAADAAAAcy4AAAB8AGoAZAB1AXIYdAF0AnwAgwKgA6EAUwB0AoMAfQF8AXwASwB9AXwBUwBkAFMAcokAAAApBHJ2AQAAcmQCAAByEQAAAHLpAAAAckcBAAByZQIAAHJ5AAAAcnoAAABy6QAAAHYQAABzCgAAAAABCgEOAgYBCAF6DEZvcndhcmQuY29weSkBTikNcpsAAABynAAAAHKdAAAAcsMAAAByrQAAAHI8AwAAcj0DAAByTwIAAHIaAgAAclsCAABytgAAAHLpAAAAcoECAAByeQAAAHJ5AAAAcmUCAAByegAAAHIRAAAALRAAAHMSAAAACAEEEg4DCA0IAwgECAcMBwgRchEAAABjAAAAAAAAAAAAAAAAAAAAAAIAAABAAAAAcxQAAABlAFoBZABaAmQBZAKEAFoDZANTACkEckADAABjAQAAAAAAAAAAAAAAAQAAAAEAAABDAAAAcwQAAABkAVMAKQJOcrcCAAByeQAAAHK1AAAAcnkAAAByeQAAAHJ6AAAAcrYAAAB/EAAAcwIAAAAAAXoZX0ZvcndhcmROb1JlY3Vyc2UuX19zdHJfX04pBHKbAAAAcpwAAABynQAAAHK2AAAAcnkAAAByeQAAAHJ5AAAAcnoAAAByQAMAAH4QAABzAgAAAAgBckADAABjAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAcyIAAABlAFoBZABaAmQBWgNkBYcAZgFkA2QEhAlaBIcABABaBVMAKQZyLwAAAHpRCiAgICBBYnN0cmFjdCBzdWJjbGFzcyBvZiBDe1BhcnNlRXhwcmVzc2lvbn0sIGZvciBjb252ZXJ0aW5nIHBhcnNlZCByZXN1bHRzLgogICAgRmMDAAAAAAAAAAAAAAADAAAAAwAAAAMAAABzGgAAAHQAdAF8AIMCoAJ8AaEBAQBkAXwAXwNkAFMAcgACAAApBHJkAgAAci8AAAByrQAAAHKmAQAAch8DAAByZQIAAHJ5AAAAcnoAAAByrQAAAIYQAABzBAAAAAABEAF6F1Rva2VuQ29udmVydGVyLl9faW5pdF9fKQFGcoQCAAByeQAAAHJ5AAAAcmUCAAByegAAAHIvAAAAghAAAHMEAAAACAEEA3IvAAAAYwAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAHM2AAAAZQBaAWQAWgJkAVoDZAqHAGYBZARkBYQJWgSHAGYBZAZkB4QIWgVkCGQJhABaBocABABaB1MAKQtyDAAAAGHUAgAACiAgICBDb252ZXJ0ZXIgdG8gY29uY2F0ZW5hdGUgYWxsIG1hdGNoaW5nIHRva2VucyB0byBhIHNpbmdsZSBzdHJpbmcuCiAgICBCeSBkZWZhdWx0LCB0aGUgbWF0Y2hpbmcgcGF0dGVybnMgbXVzdCBhbHNvIGJlIGNvbnRpZ3VvdXMgaW4gdGhlIGlucHV0IHN0cmluZzsKICAgIHRoaXMgY2FuIGJlIGRpc2FibGVkIGJ5IHNwZWNpZnlpbmcgQ3snYWRqYWNlbnQ9RmFsc2UnfSBpbiB0aGUgY29uc3RydWN0b3IuCgogICAgRXhhbXBsZTo6CiAgICAgICAgcmVhbCA9IFdvcmQobnVtcykgKyAnLicgKyBXb3JkKG51bXMpCiAgICAgICAgcHJpbnQocmVhbC5wYXJzZVN0cmluZygnMy4xNDE2JykpICMgLT4gWyczJywgJy4nLCAnMTQxNiddCiAgICAgICAgIyB3aWxsIGFsc28gZXJyb25lb3VzbHkgbWF0Y2ggdGhlIGZvbGxvd2luZwogICAgICAgIHByaW50KHJlYWwucGFyc2VTdHJpbmcoJzMuIDE0MTYnKSkgIyAtPiBbJzMnLCAnLicsICcxNDE2J10KCiAgICAgICAgcmVhbCA9IENvbWJpbmUoV29yZChudW1zKSArICcuJyArIFdvcmQobnVtcykpCiAgICAgICAgcHJpbnQocmVhbC5wYXJzZVN0cmluZygnMy4xNDE2JykpICMgLT4gWyczLjE0MTYnXQogICAgICAgICMgbm8gbWF0Y2ggd2hlbiB0aGVyZSBhcmUgaW50ZXJuYWwgc3BhY2VzCiAgICAgICAgcHJpbnQocmVhbC5wYXJzZVN0cmluZygnMy4gMTQxNicpKSAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgVzooMDEyMy4uLikKICAgIHKgAAAAVGMEAAAAAAAAAAAAAAAEAAAAAwAAAAMAAABzOAAAAHQAdAF8AIMCoAJ8AaEBAQB8A3IcfACgA6EAAQB8A3wAXwRkAXwAXwV8AnwAXwZkAXwAXwdkAFMActUAAAApCHJkAgAAcgwAAAByrQAAAHJPAgAA2ghhZGphY2VudHKnAQAA2gpqb2luU3RyaW5ncrQBAAApBHKrAAAAcnYBAAByQwMAAHJCAwAAcmUCAAByeQAAAHJ6AAAAcq0AAACbEAAAcw4AAAAAARACBAEIAQYBBgEGAXoQQ29tYmluZS5fX2luaXRfX2MCAAAAAAAAAAAAAAACAAAABAAAAAMAAABzKAAAAHwAagByFHQBoAJ8AHwBoQIBAG4QdAN0BHwAgwKgAnwBoQEBAHwAUwByiQAAACkFckIDAAByJgAAAHJSAgAAcmQCAAByDAAAAHI3AQAAcmUCAAByeQAAAHJ6AAAAclICAAClEAAAcwgAAAAAAQYBDgIQAXoOQ29tYmluZS5pZ25vcmVjBAAAAAAAAAAAAAAABQAAAAcAAABDAAAAc1AAAAB8A6AAoQB9BHwEZABkAIUCPQB8BHQBZAGgAnwDoAN8AGoEoQGhAWcBfABqBWQCjQI3AH0EfABqBnJIfASgB6EAckh8BGcBUwB8BFMAZABTACkDTnKgAAAAKQFy3AAAACkIcukAAAByJAAAAHK6AAAAcj0BAAByQwMAAHKxAQAAcqUBAAByGgEAACkFcqsAAABydQEAAHKmAAAAcuMBAADaB3JldFRva3NyeQAAAHJ5AAAAcnoAAABy5AEAAKwQAABzDAAAAAABCAEKASICDgEGAnoRQ29tYmluZS5wb3N0UGFyc2UpAnKgAAAAVCkIcpsAAABynAAAAHKdAAAAcsMAAAByrQAAAHJSAgAAcuQBAABygQIAAHJ5AAAAcnkAAAByZQIAAHJ6AAAAcgwAAACKEAAAcwgAAAAIAQQQDgoMB3IMAAAAYwAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAHMoAAAAZQBaAWQAWgJkAVoDhwBmAWQCZAOECFoEZARkBYQAWgWHAAQAWgZTACkGchMAAABh+QEAAAogICAgQ29udmVydGVyIHRvIHJldHVybiB0aGUgbWF0Y2hlZCB0b2tlbnMgYXMgYSBsaXN0IC0gdXNlZnVsIGZvciByZXR1cm5pbmcgdG9rZW5zIG9mIEN7THtaZXJvT3JNb3JlfX0gYW5kIEN7THtPbmVPck1vcmV9fSBleHByZXNzaW9ucy4KCiAgICBFeGFtcGxlOjoKICAgICAgICBpZGVudCA9IFdvcmQoYWxwaGFzKQogICAgICAgIG51bSA9IFdvcmQobnVtcykKICAgICAgICB0ZXJtID0gaWRlbnQgfCBudW0KICAgICAgICBmdW5jID0gaWRlbnQgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHRlcm0pKQogICAgICAgIHByaW50KGZ1bmMucGFyc2VTdHJpbmcoImZuIGEsYiwxMDAiKSkgICMgLT4gWydmbicsICdhJywgJ2InLCAnMTAwJ10KCiAgICAgICAgZnVuYyA9IGlkZW50ICsgR3JvdXAoT3B0aW9uYWwoZGVsaW1pdGVkTGlzdCh0ZXJtKSkpCiAgICAgICAgcHJpbnQoZnVuYy5wYXJzZVN0cmluZygiZm4gYSxiLDEwMCIpKSAgIyAtPiBbJ2ZuJywgWydhJywgJ2InLCAnMTAwJ11dCiAgICBjAgAAAAAAAAAAAAAAAgAAAAMAAAADAAAAcxoAAAB0AHQBfACDAqACfAGhAQEAZAF8AF8DZABTAHLVAAAAKQRyZAIAAHITAAAAcq0AAABypgEAAHIiAwAAcmUCAAByeQAAAHJ6AAAAcq0AAADEEAAAcwQAAAAAARABeg5Hcm91cC5fX2luaXRfX2MEAAAAAAAAAAAAAAAEAAAAAQAAAEMAAABzBgAAAHwDZwFTAHKJAAAAcnkAAABy4gEAAHJ5AAAAcnkAAAByegAAAHLkAQAAyBAAAHMCAAAAAAF6D0dyb3VwLnBvc3RQYXJzZakHcpsAAABynAAAAHKdAAAAcsMAAAByrQAAAHLkAQAAcoECAAByeQAAAHJ5AAAAcmUCAAByegAAAHITAAAAthAAAHMGAAAACAEEDQwEchMAAABjAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAcygAAABlAFoBZABaAmQBWgOHAGYBZAJkA4QIWgRkBGQFhABaBYcABABaBlMAKQZyDQAAAGFXBgAACiAgICBDb252ZXJ0ZXIgdG8gcmV0dXJuIGEgcmVwZXRpdGl2ZSBleHByZXNzaW9uIGFzIGEgbGlzdCwgYnV0IGFsc28gYXMgYSBkaWN0aW9uYXJ5LgogICAgRWFjaCBlbGVtZW50IGNhbiBhbHNvIGJlIHJlZmVyZW5jZWQgdXNpbmcgdGhlIGZpcnN0IHRva2VuIGluIHRoZSBleHByZXNzaW9uIGFzIGl0cyBrZXkuCiAgICBVc2VmdWwgZm9yIHRhYnVsYXIgcmVwb3J0IHNjcmFwaW5nIHdoZW4gdGhlIGZpcnN0IGNvbHVtbiBjYW4gYmUgdXNlZCBhcyBhIGl0ZW0ga2V5LgoKICAgIEV4YW1wbGU6OgogICAgICAgIGRhdGFfd29yZCA9IFdvcmQoYWxwaGFzKQogICAgICAgIGxhYmVsID0gZGF0YV93b3JkICsgRm9sbG93ZWRCeSgnOicpCiAgICAgICAgYXR0cl9leHByID0gR3JvdXAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogbGlnaHQgYmx1ZSB0ZXh0dXJlOiBidXJsYXAiCiAgICAgICAgYXR0cl9leHByID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIAogICAgICAgICMgcHJpbnQgYXR0cmlidXRlcyBhcyBwbGFpbiBncm91cHMKICAgICAgICBwcmludChPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5kdW1wKCkpCiAgICAgICAgCiAgICAgICAgIyBpbnN0ZWFkIG9mIE9uZU9yTW9yZShleHByKSwgcGFyc2UgdXNpbmcgRGljdChPbmVPck1vcmUoR3JvdXAoZXhwcikpKSAtIERpY3Qgd2lsbCBhdXRvLWFzc2lnbiBuYW1lcwogICAgICAgIHJlc3VsdCA9IERpY3QoT25lT3JNb3JlKEdyb3VwKGF0dHJfZXhwcikpKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCiAgICAgICAgCiAgICAgICAgIyBhY2Nlc3MgbmFtZWQgZmllbGRzIGFzIGRpY3QgZW50cmllcywgb3Igb3V0cHV0IGFzIGRpY3QKICAgICAgICBwcmludChyZXN1bHRbJ3NoYXBlJ10pICAgICAgICAKICAgICAgICBwcmludChyZXN1bHQuYXNEaWN0KCkpCiAgICBwcmludHM6OgogICAgICAgIFsnc2hhcGUnLCAnU1FVQVJFJywgJ3Bvc24nLCAndXBwZXIgbGVmdCcsICdjb2xvcicsICdsaWdodCBibHVlJywgJ3RleHR1cmUnLCAnYnVybGFwJ10KCiAgICAgICAgW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsncG9zbicsICd1cHBlciBsZWZ0J10sIFsnY29sb3InLCAnbGlnaHQgYmx1ZSddLCBbJ3RleHR1cmUnLCAnYnVybGFwJ11dCiAgICAgICAgLSBj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IHBhcnNlIGFjdGlvbnMuIAogICAgCiAgICBXaGVuIHRoZSBwYXJzZSBhY3Rpb24gaXMgY2FsbGVkLCB0aGlzIGRlY29yYXRvciB3aWxsIHByaW50IEN7Ij4+IGVudGVyaW5nIEl7bWV0aG9kLW5hbWV9KGxpbmU6SXtjdXJyZW50X3NvdXJjZV9saW5lfSwgSXtwYXJzZV9sb2NhdGlvbn0sIEl7bWF0Y2hlZF90b2tlbnN9KSIufQogICAgV2hlbiB0aGUgcGFyc2UgYWN0aW9uIGNvbXBsZXRlcywgdGhlIGRlY29yYXRvciB3aWxsIHByaW50IEN7Ijw8In0gZm9sbG93ZWQgYnkgdGhlIHJldHVybmVkIHZhbHVlLCBvciBhbnkgZXhjZXB0aW9uIHRoYXQgdGhlIHBhcnNlIGFjdGlvbiByYWlzZWQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgd2QgPSBXb3JkKGFscGhhcykKCiAgICAgICAgQHRyYWNlUGFyc2VBY3Rpb24KICAgICAgICBkZWYgcmVtb3ZlX2R1cGxpY2F0ZV9jaGFycyh0b2tlbnMpOgogICAgICAgICAgICByZXR1cm4gJycuam9pbihzb3J0ZWQoc2V0KCcnLmpvaW4odG9rZW5zKSkpKQoKICAgICAgICB3ZHMgPSBPbmVPck1vcmUod2QpLnNldFBhcnNlQWN0aW9uKHJlbW92ZV9kdXBsaWNhdGVfY2hhcnMpCiAgICAgICAgcHJpbnQod2RzLnBhcnNlU3RyaW5nKCJzbGtkanMgc2xkIHNsZGQgc2RsZiBzZGxqZiIpKQogICAgcHJpbnRzOjoKICAgICAgICA+PmVudGVyaW5nIHJlbW92ZV9kdXBsaWNhdGVfY2hhcnMobGluZTogJ3Nsa2RqcyBzbGQgc2xkZCBzZGxmIHNkbGpmJywgMCwgKFsnc2xrZGpzJywgJ3NsZCcsICdzbGRkJywgJ3NkbGYnLCAnc2RsamYnXSwge30pKQogICAgICAgIDw8bGVhdmluZyByZW1vdmVfZHVwbGljYXRlX2NoYXJzIChyZXQ6ICdkZmprbHMnKQogICAgICAgIFsnZGZqa2xzJ10KICAgIGMAAAAAAAAAAAAAAAAHAAAACgAAABcAAABztgAAAIgAagB9AXwAZAFkAIUCGQBcA30CfQN9BHQBfACDAWQCawRyOHwAZAMZAGoCagBkBBcAfAEXAH0BdANqBKAFZAV8AXQGfAN8AoMCfAN8BGYEFgChAQEAegyIAHwAjgB9BVcAbjoEAHQHeZwBAH0GAQB6InQDagSgBWQGfAF8BmYCFgChAQEAggBXAFkAZAB9Bn4GbgpkAH0GfgYwADAAdANqBKAFZAd8AXwFZgIWAKEBAQB8BVMAKQhOcoIBAABycQAAAHIBAAAA2gEueiI+PmVudGVyaW5nICVzKGxpbmU6ICclcycsICVkLCAlcikKeh08PGxlYXZpbmcgJXMgKGV4Y2VwdGlvbjogJXMpCnoXPDxsZWF2aW5nICVzIChyZXQ6ICVyKQopCHKbAAAAcvgAAABylAEAAHKCAAAA2gZzdGRlcnLaBXdyaXRlckkAAABylwEAACkH2gZwYUFyZ3PaCHRoaXNGdW5jcpAAAAByfwEAAHJ4AAAAcocAAAByfAEAAKkBcmECAAByeQAAAHJ6AAAA2gF6TBEAAHMYAAAAAAEGARIBDAEUAR4BAgEMAQ4BFAEYARQBeht0cmFjZVBhcnNlQWN0aW9uLjxsb2NhbHM+LnopA3KbAQAAcpsAAABysgAAACkCcmECAAByUwMAAHJ5AAAAclIDAAByegAAAHJkAAAANhEAAHMOAAAAABUIAQwNAgEMAQwBBgFyZAAAAPoBLEZjAwAAAAAAAAAAAAAABAAAAAUAAABDAAAAc2AAAAB0AHwAgwFkARcAdAB8AYMBFwBkAhcAdAB8AIMBFwBkAxcAfQN8AnJCdAF8AHQCfAF8ABcAgwEXAIMBoAN8A6EBUwB8AHQCdAR8AYMBfAAXAIMBFwCgA3wDoQFTAGQEUwApBWHHAgAACiAgICBIZWxwZXIgdG8gZGVmaW5lIGEgZGVsaW1pdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgLSB0aGUgZGVsaW1pdGVyIGRlZmF1bHRzIHRvICcsJy4KICAgIEJ5IGRlZmF1bHQsIHRoZSBsaXN0IGVsZW1lbnRzIGFuZCBkZWxpbWl0ZXJzIGNhbiBoYXZlIGludGVydmVuaW5nIHdoaXRlc3BhY2UsIGFuZAogICAgY29tbWVudHMsIGJ1dCB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBhc3NpbmcgQ3tjb21iaW5lPVRydWV9IGluIHRoZSBjb25zdHJ1Y3Rvci4KICAgIElmIEN7Y29tYmluZX0gaXMgc2V0IHRvIEN7VHJ1ZX0sIHRoZSBtYXRjaGluZyB0b2tlbnMgYXJlIHJldHVybmVkIGFzIGEgc2luZ2xlIHRva2VuCiAgICBzdHJpbmcsIHdpdGggdGhlIGRlbGltaXRlcnMgaW5jbHVkZWQ7IG90aGVyd2lzZSwgdGhlIG1hdGNoaW5nIHRva2VucyBhcmUgcmV0dXJuZWQKICAgIGFzIGEgbGlzdCBvZiB0b2tlbnMsIHdpdGggdGhlIGRlbGltaXRlcnMgc3VwcHJlc3NlZC4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkZWxpbWl0ZWRMaXN0KFdvcmQoYWxwaGFzKSkucGFyc2VTdHJpbmcoImFhLGJiLGNjIikgIyAtPiBbJ2FhJywgJ2JiJywgJ2NjJ10KICAgICAgICBkZWxpbWl0ZWRMaXN0KFdvcmQoaGV4bnVtcyksIGRlbGltPSc6JywgY29tYmluZT1UcnVlKS5wYXJzZVN0cmluZygiQUE6QkI6Q0M6REQ6RUUiKSAjIC0+IFsnQUE6QkI6Q0M6REQ6RUUnXQogICAgegIgW3JxAgAAci8DAABOKQVyiAAAAHIMAAAAcjQAAAByugEAAHItAAAAKQRydgEAANoFZGVsaW3aB2NvbWJpbmXaBmRsTmFtZXJ5AAAAcnkAAAByegAAAHJCAAAAYhEAAHMIAAAAAA0kAQQBGgJyQgAAAGMCAAAAAAAAAAAAAAADAAAABQAAAAMAAABzagAAAHQAgwCJAIcAhwFmAmQBZAKECH0CfAFkA3UAcjB0AXQCgwGgA2QEZAWEAKEBfQFuCHwBoAShAH0BfAGgBWQGoQEBAHwBagZ8AmQHZAiNAgEAfAGIABcAoAVkCXQHiAGDARcAZAoXAKEBUwApC2E6AwAACiAgICBIZWxwZXIgdG8gZGVmaW5lIGEgY291bnRlZCBsaXN0IG9mIGV4cHJlc3Npb25zLgogICAgVGhpcyBoZWxwZXIgZGVmaW5lcyBhIHBhdHRlcm4gb2YgdGhlIGZvcm06OgogICAgICAgIGludGVnZXIgZXhwciBleHByIGV4cHIuLi4KICAgIHdoZXJlIHRoZSBsZWFkaW5nIGludGVnZXIgdGVsbHMgaG93IG1hbnkgZXhwciBleHByZXNzaW9ucyBmb2xsb3cuCiAgICBUaGUgbWF0Y2hlZCB0b2tlbnMgcmV0dXJucyB0aGUgYXJyYXkgb2YgZXhwciB0b2tlbnMgYXMgYSBsaXN0IC0gdGhlIGxlYWRpbmcgY291bnQgdG9rZW4gaXMgc3VwcHJlc3NlZC4KICAgIAogICAgSWYgQ3tpbnRFeHByfSBpcyBzcGVjaWZpZWQsIGl0IHNob3VsZCBiZSBhIHB5cGFyc2luZyBleHByZXNzaW9uIHRoYXQgcHJvZHVjZXMgYW4gaW50ZWdlciB2YWx1ZS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBjb3VudGVkQXJyYXkoV29yZChhbHBoYXMpKS5wYXJzZVN0cmluZygnMiBhYiBjZCBlZicpICAjIC0+IFsnYWInLCAnY2QnXQoKICAgICAgICAjIGluIHRoaXMgcGFyc2VyLCB0aGUgbGVhZGluZyBpbnRlZ2VyIHZhbHVlIGlzIGdpdmVuIGluIGJpbmFyeSwKICAgICAgICAjICcxMCcgaW5kaWNhdGluZyB0aGF0IDIgdmFsdWVzIGFyZSBpbiB0aGUgYXJyYXkKICAgICAgICBiaW5hcnlDb25zdGFudCA9IFdvcmQoJzAxJykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHQ6IGludCh0WzBdLCAyKSkKICAgICAgICBjb3VudGVkQXJyYXkoV29yZChhbHBoYXMpLCBpbnRFeHByPWJpbmFyeUNvbnN0YW50KS5wYXJzZVN0cmluZygnMTAgYWIgY2QgZWYnKSAgIyAtPiBbJ2FiJywgJ2NkJ10KICAgIGMDAAAAAAAAAAAAAAAEAAAABQAAABMAAABzLgAAAHwCZAEZAH0DiAB8A3IgdAB0AYgBZwF8AxQAgwGDAXAmdAB0AoMBPgABAGcAUwBy0gAAACkDchMAAAByCAAAAHJFAAAAKQRykAAAAHJ/AQAAcngAAAByPAIAAKkC2glhcnJheUV4cHJydgEAAHJ5AAAAcnoAAADaFWNvdW50RmllbGRQYXJzZUFjdGlvbogRAABzBgAAAAABCAEiAXorY291bnRlZEFycmF5Ljxsb2NhbHM+LmNvdW50RmllbGRQYXJzZUFjdGlvbk5jAQAAAAAAAAAAAAAAAQAAAAMAAABTAAAAcwwAAAB0AHwAZAEZAIMBUwBy0gAAACkBcnYAAABydwAAAHJ5AAAAcnkAAAByegAAAHJ7AAAAjREAAHJ8AAAAeh5jb3VudGVkQXJyYXkuPGxvY2Fscz4uPGxhbWJkYT7aCGFycmF5TGVuVKkBcrUBAAB6BihsZW4pIHK3AgAAKQhyEQAAAHIxAAAAclQAAAByhAAAAHLpAAAAcroBAAByzgEAAHKIAAAAKQNydgEAANoHaW50RXhwcnJaAwAAcnkAAAByWAMAAHJ6AAAAcj4AAAB1EQAAcxAAAAAAEgYBDgQIARQCCAEKAQ4Bcj4AAABjAQAAAAAAAAAAAAAAAwAAAAUAAABDAAAAczYAAABnAH0BfABEAF0ofQJ0AHwCdAGDAnImfAGgAnQDfAKDAaEBAQBxCHwBoAR8AqEBAQBxCHwBUwByiQAAACkFcn0AAABy4wAAAHImAQAAcioCAAByJAEAACkD2gFMcocAAABy0AAAAHJ5AAAAcnkAAAByegAAAHIqAgAAlBEAAHMMAAAAAAEEAQgBCgEQAgwBcioCAABjAQAAAAAAAAAAAAAAAgAAAAUAAAADAAAAczYAAAB0AIMAiQCHAGYBZAFkAoQIfQF8AGoBfAFkA2QEjQIBAIgAoAJkBXQDfACDARcAoQEBAIgAUwApBmEqAgAACiAgICBIZWxwZXIgdG8gZGVmaW5lIGFuIGV4cHJlc3Npb24gdGhhdCBpcyBpbmRpcmVjdGx5IGRlZmluZWQgZnJvbQogICAgdGhlIHRva2VucyBtYXRjaGVkIGluIGEgcHJldmlvdXMgZXhwcmVzc2lvbiwgdGhhdCBpcywgaXQgbG9va3MKICAgIGZvciBhICdyZXBlYXQnIG9mIGEgcHJldmlvdXMgZXhwcmVzc2lvbi4gIEZvciBleGFtcGxlOjoKICAgICAgICBmaXJzdCA9IFdvcmQobnVtcykKICAgICAgICBzZWNvbmQgPSBtYXRjaFByZXZpb3VzTGl0ZXJhbChmaXJzdCkKICAgICAgICBtYXRjaEV4cHIgPSBmaXJzdCArICI6IiArIHNlY29uZAogICAgd2lsbCBtYXRjaCBDeyIxOjEifSwgYnV0IG5vdCBDeyIxOjIifS4gIEJlY2F1c2UgdGhpcyBtYXRjaGVzIGEKICAgIHByZXZpb3VzIGxpdGVyYWwsIHdpbGwgYWxzbyBtYXRjaCB0aGUgbGVhZGluZyBDeyIxOjEifSBpbiBDeyIxOjEwIn0uCiAgICBJZiB0aGlzIGlzIG5vdCBkZXNpcmVkLCB1c2UgQ3ttYXRjaFByZXZpb3VzRXhwcn0uCiAgICBEbyBJe25vdH0gdXNlIHdpdGggcGFja3JhdCBwYXJzaW5nIGVuYWJsZWQuCiAgICBjAwAAAAAAAAAAAAAABAAAAAQAAAATAAAAc1AAAAB8AnJCdAB8AoMBZAFrAnIeiAB8AmQCGQA+AAEAcUx0AXwCoAKhAIMBfQOIAHQDZANkBIQAfANEAIMBgwE+AAEAbgqIAHQEgwA+AAEAZABTACkFTnKNAAAAcgEAAABjAQAAAAAAAAAAAAAAAgAAAAMAAABzAAAAcxYAAAB8AF0OfQF0AHwBgwFWAAEAcQJkAFMAcokAAAApAXIXAAAAqQJyigAAANoCdHRyeQAAAHJ5AAAAcnoAAAByjAAAALIRAAByfAAAAHpEbWF0Y2hQcmV2aW91c0xpdGVyYWwuPGxvY2Fscz4uY29weVRva2VuVG9SZXBlYXRlci48bG9jYWxzPi48Z2VuZXhwcj4pBXL4AAAAcioCAABy2wAAAHIIAAAAcg8AAAApBHKQAAAAcn8BAAByeAAAANoFdGZsYXSpAdoDcmVwcnkAAAByegAAANoTY29weVRva2VuVG9SZXBlYXRlcqsRAABzDAAAAAABBAEMAQ4DDAEYAnoxbWF0Y2hQcmV2aW91c0xpdGVyYWwuPGxvY2Fscz4uY29weVRva2VuVG9SZXBlYXRlclRyXAMAAPoHKHByZXYpICkEchEAAAByzgEAAHK6AQAAcogAAAApAnJ2AQAAcmQDAAByeQAAAHJiAwAAcnoAAAByUQAAAJ0RAABzCgAAAAANBgEMCg4BEgFyUQAAAGMBAAAAAAAAAAAAAAADAAAABQAAAAMAAABzRgAAAHQAgwCJAHwAoAGhAH0BiAB8AUsAiQCHAGYBZAFkAoQIfQJ8AGoCfAJkA2QEjQIBAIgAoANkBXQEfACDARcAoQEBAIgAUwApBmFTAgAACiAgICBIZWxwZXIgdG8gZGVmaW5lIGFuIGV4cHJlc3Npb24gdGhhdCBpcyBpbmRpcmVjdGx5IGRlZmluZWQgZnJvbQogICAgdGhlIHRva2VucyBtYXRjaGVkIGluIGEgcHJldmlvdXMgZXhwcmVzc2lvbiwgdGhhdCBpcywgaXQgbG9va3MKICAgIGZvciBhICdyZXBlYXQnIG9mIGEgcHJldmlvdXMgZXhwcmVzc2lvbi4gIEZvciBleGFtcGxlOjoKICAgICAgICBmaXJzdCA9IFdvcmQobnVtcykKICAgICAgICBzZWNvbmQgPSBtYXRjaFByZXZpb3VzRXhwcihmaXJzdCkKICAgICAgICBtYXRjaEV4cHIgPSBmaXJzdCArICI6IiArIHNlY29uZAogICAgd2lsbCBtYXRjaCBDeyIxOjEifSwgYnV0IG5vdCBDeyIxOjIifS4gIEJlY2F1c2UgdGhpcyBtYXRjaGVzIGJ5CiAgICBleHByZXNzaW9ucywgd2lsbCBJe25vdH0gbWF0Y2ggdGhlIGxlYWRpbmcgQ3siMToxIn0gaW4gQ3siMToxMCJ9OwogICAgdGhlIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgZmlyc3QsIGFuZCB0aGVuIGNvbXBhcmVkLCBzbwogICAgQ3siMSJ9IGlzIGNvbXBhcmVkIHdpdGggQ3siMTAifS4KICAgIERvIEl7bm90fSB1c2Ugd2l0aCBwYWNrcmF0IHBhcnNpbmcgZW5hYmxlZC4KICAgIGMDAAAAAAAAAAAAAAAEAAAABAAAABMAAABzKgAAAHQAfAKgAaEAgwGJAIcAZgFkAWQChAh9A4gBagJ8A2QDZASNAgEAZABTACkFTmMDAAAAAAAAAAAAAAAEAAAABAAAABMAAABzJAAAAHQAfAKgAaEAgwF9A3wDiABrA3IgdAJkAWQCZAGDA4IBZABTACkDTnKgAAAAcgEAAAApA3IqAgAActsAAAByIQAAACkEcpAAAAByfwEAAHJ4AAAA2gt0aGVzZVRva2Vuc6kB2gttYXRjaFRva2Vuc3J5AAAAcnoAAADaFG11c3RNYXRjaFRoZXNlVG9rZW5zzBEAAHMGAAAAAAEMAQgBekxtYXRjaFByZXZpb3VzRXhwci48bG9jYWxzPi5jb3B5VG9rZW5Ub1JlcGVhdGVyLjxsb2NhbHM+Lm11c3RNYXRjaFRoZXNlVG9rZW5zVHJcAwAAKQNyKgIAAHLbAAAAcoQAAAApBHKQAAAAcn8BAAByeAAAAHJpAwAAcmIDAAByZwMAAHJ6AAAAcmQDAADKEQAAcwYAAAAAAQwBDAR6Lm1hdGNoUHJldmlvdXNFeHByLjxsb2NhbHM+LmNvcHlUb2tlblRvUmVwZWF0ZXJUclwDAAByZQMAACkFchEAAABy6QAAAHLOAQAAcroBAAByiAAAACkDcnYBAADaAmUycmQDAAByeQAAAHJiAwAAcnoAAAByUAAAALkRAABzDgAAAAAOBgEIAQgBDAcOARIBclAAAABjAQAAAAAAAAAAAAAAAgAAAAYAAABDAAAAczoAAABkAUQAXRR9AXwAoAB8AXQBfAEXAKECfQBxBHwAoABkAmQDoQJ9AHwAoABkBGQFoQJ9AHQCfACDAVMAKQZOegRcXi1dckgBAABycAIAAHLTAgAActYCAAApA3KTAAAA2gdfYnNsYXNocogAAAApAnKQAAAAcqQAAAByeQAAAHJ5AAAAcnoAAAByqwIAANURAABzCgAAAAACCAESAQwBDAFyqwIAAFRjAwAAAAAAAAAAAAAACgAAAAgAAAADAAAAc8QBAAB8AXIaZAFkAoQAfQNkA2QChAB9BHQAiQBuFGQEZAKEAH0DZAVkAoQAfQR0AYkAZwB9BXQCfAB0A4MCckZ8AKAEoQB9BW4kdAJ8AHQFgwJyWnQGfACDAX0FbhB0B2oIZAZ0CWQHZAiNAwEAfAVzdHQKgwBTAGQJfQZ8BnQLfAWDAWQKGABrAJABcgR8BXwGGQB9B3QMfAV8BmQKFwBkC4UCGQCDAUQAXVJcAn0IfQl8A3wJfAeDAnLMfAV8BnwIFwBkChcAPQABAHF4caZ8BHwHfAmDAnKmfAV8BnwIFwBkChcAPQB8BaANfAZ8CaECAQB8CX0HAQBxeHGmfAZkCjcAfQZxeHwBkAFzonwCkAFyonpsdAt8BYMBdAtkDKAOfAWhAYMBawKQAXJUdA9kDWQMoA5kDmQPhAB8BUQAgwGhARYAgwGgEGQQoA58BaEBoQFXAFMAdA9kEaAOZBJkD4QAfAVEAIMBoQGDAaAQZBCgDnwFoQGhAVcAUwBXAG4kBAB0EZABeaABAAEAAQB0B2oIZBN0CWQHZAiNAwEAWQBuAjAAdBKHAGYBZBRkD4QIfAVEAIMBgwGgEGQQoA58BaEBoQFTACkVYdsDAAAKICAgIEhlbHBlciB0byBxdWlja2x5IGRlZmluZSBhIHNldCBvZiBhbHRlcm5hdGl2ZSBMaXRlcmFscywgYW5kIG1ha2VzIHN1cmUgdG8gZG8KICAgIGxvbmdlc3QtZmlyc3QgdGVzdGluZyB3aGVuIHRoZXJlIGlzIGEgY29uZmxpY3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIGlucHV0IG9yZGVyLAogICAgYnV0IHJldHVybnMgYSBDe0x7TWF0Y2hGaXJzdH19IGZvciBiZXN0IHBlcmZvcm1hbmNlLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBzdHJzIC0gYSBzdHJpbmcgb2Ygc3BhY2UtZGVsaW1pdGVkIGxpdGVyYWxzLCBvciBhIGNvbGxlY3Rpb24gb2Ygc3RyaW5nIGxpdGVyYWxzCiAgICAgLSBjYXNlbGVzcyAtIChkZWZhdWx0PUN7RmFsc2V9KSAtIHRyZWF0IGFsbCBsaXRlcmFscyBhcyBjYXNlbGVzcwogICAgIC0gdXNlUmVnZXggLSAoZGVmYXVsdD1De1RydWV9KSAtIGFzIGFuIG9wdGltaXphdGlvbiwgd2lsbCBnZW5lcmF0ZSBhIFJlZ2V4CiAgICAgICAgICBvYmplY3Q7IG90aGVyd2lzZSwgd2lsbCBnZW5lcmF0ZSBhIEN7TWF0Y2hGaXJzdH0gb2JqZWN0IChpZiBDe2Nhc2VsZXNzPVRydWV9LCBvcgogICAgICAgICAgaWYgY3JlYXRpbmcgYSBDe1JlZ2V4fSByYWlzZXMgYW4gZXhjZXB0aW9uKQoKICAgIEV4YW1wbGU6OgogICAgICAgIGNvbXBfb3BlciA9IG9uZU9mKCI8ID0gPiA8PSA+PSAhPSIpCiAgICAgICAgdmFyID0gV29yZChhbHBoYXMpCiAgICAgICAgbnVtYmVyID0gV29yZChudW1zKQogICAgICAgIHRlcm0gPSB2YXIgfCBudW1iZXIKICAgICAgICBjb21wYXJpc29uX2V4cHIgPSB0ZXJtICsgY29tcF9vcGVyICsgdGVybQogICAgICAgIHByaW50KGNvbXBhcmlzb25fZXhwci5zZWFyY2hTdHJpbmcoIkIgPSAxMiAgQUE9MjMgQjw9QUEgQUE+MTIiKSkKICAgIHByaW50czo6CiAgICAgICAgW1sn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ICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBsaWdodCBibHVlIHRleHR1cmU6IGJ1cmxhcCIKICAgICAgICBhdHRyX2V4cHIgPSAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCiAgICAgICAgcHJpbnQoT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkuZHVtcCgpKQogICAgICAgIAogICAgICAgIGF0dHJfbGFiZWwgPSBsYWJlbAogICAgICAgIGF0dHJfdmFsdWUgPSBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikKCiAgICAgICAgIyBzaW1pbGFyIHRvIERpY3QsIGJ1dCBzaW1wbGVyIGNhbGwgZm9ybWF0CiAgICAgICAgcmVzdWx0ID0gZGljdE9mKGF0dHJfbGFiZWwsIGF0dHJfdmFsdWUpLnBhcnNlU3RyaW5nKHRleHQpCiAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKICAgICAgICBwcmludChyZXN1bHRbJ3NoYXBlJ10pCiAgICAgICAgcHJpbnQocmVzdWx0LnNoYXBlKSAgIyBvYmplY3QgYXR0cmlidXRlIGFjY2VzcyB3b3JrcyB0b28KICAgICAgICBwcmludChyZXN1bHQuYXNEaWN0KCkpCiAgICBwcmludHM6OgogICAgICAgIFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIgbGVmdCddLCBbJ2NvbG9yJywgJ2xpZ2h0IGJsdWUnXSwgWyd0ZXh0dXJlJywgJ2J1cmxhcCddXQogICAgICAgIC0gY29sb3I6IGxpZ2h0IGJsdWUKICAgICAgICAtIHBvc246IHVwcGVyIGxlZnQKICAgICAgICAtIHNoYXBlOiBTUVVBUkUKICAgICAgICAtIHRleHR1cmU6IGJ1cmxhcAogICAgICAgIFNRVUFSRQogICAgICAgIFNR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AAADAAAAAwAAAA8AAABzOAAAAHwAchJ8AGQBZAGFAhkAiQBuCHwBoAChAIkAZAJkA4QAiABEAIMBiQCHAGYBZARkBYQIfQJ8AlMAKQZhPAgAAAogICAgSGVscGVyIHRvIGNyZWF0ZSBhIHZhbGlkYXRpbmcgcGFyc2UgYWN0aW9uIHRvIGJlIHVzZWQgd2l0aCBzdGFydCB0YWdzIGNyZWF0ZWQKICAgIHdpdGggQ3tMe21ha2VYTUxUYWdzfX0gb3IgQ3tMe21ha2VIVE1MVGFnc319LiBVc2UgQ3t3aXRoQXR0cmlidXRlfSB0byBxdWFsaWZ5IGEgc3RhcnRpbmcgdGFnCiAgICB3aXRoIGEgcmVxdWlyZWQgYXR0cmlidXRlIHZhbHVlLCB0byBhdm9pZCBmYWxzZSBtYXRjaGVzIG9uIGNvbW1vbiB0YWdzIHN1Y2ggYXMKICAgIEN7PFREPn0gb3IgQ3s8RElWPn0uCgogICAgQ2FsbCBDe3dpdGhBdHRyaWJ1dGV9IHdpdGggYSBzZXJpZXMgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuIFNwZWNpZnkgdGhlIGxpc3QKICAgIG9mIGZpbHRlciBhdHRyaWJ1dGVzIG5hbWVzIGFuZCB2YWx1ZXMgYXM6CiAgICAgLSBrZXl3b3JkIGFyZ3VtZW50cywgYXMgaW4gQ3soYWxpZ249InJpZ2h0Iil9LCBvcgogICAgIC0gYXMgYW4gZXhwbGljaXQgZGljdCB3aXRoIEN7Kip9IG9wZXJhdG9yLCB3aGVuIGFuIGF0dHJpYnV0ZSBuYW1lIGlzIGFsc28gYSBQeXRob24KICAgICAgICAgIHJlc2VydmVkIHdvcmQsIGFzIGluIEN7Kip7ImNsYXNzIjoiQ3VzdG9tZXIiLCAiYWxpZ24iOiJyaWdodCJ9fQogICAgIC0gYSBsaXN0IG9mIG5hbWUtdmFsdWUgdHVwbGVzLCBhcyBpbiAoICgibnMxOmNsYXNzIiwgIkN1c3RvbWVyIiksICgibnMyOmFsaWduIiwicmlnaHQiKSApCiAgICBGb3IgYXR0cmlidXRlIG5hbWVzIHdpdGggYSBuYW1lc3BhY2UgcHJlZml4LCB5b3UgbXVzdCB1c2UgdGhlIHNlY29uZCBmb3JtLiAgQXR0cmlidXRlCiAgICBuYW1lcyBhcmUgbWF0Y2hlZCBpbnNlbnNpdGl2ZSB0byB1cHBlci9sb3dlciBjYXNlLgogICAgICAgCiAgICBJZiBqdXN0IHRlc3RpbmcgZm9yIEN7Y2xhc3N9ICh3aXRoIG9yIHdpdGhvdXQgYSBuYW1lc3BhY2UpLCB1c2UgQ3tMe3dpdGhDbGFzc319LgoKICAgIFRvIHZlcmlmeSB0aGF0IHRoZSBhdHRyaWJ1dGUgZXhpc3RzLCBidXQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgdmFsdWUsIHBhc3MKICAgIEN7d2l0aEF0dHJpYnV0ZS5BTllfVkFMVUV9IGFzIHRoZSB2YWx1ZS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBodG1sID0gJycnCiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIFNvbWUgdGV4dAogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyaWQiPjEgNCAwIDEgMDwvZGl2PgogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyYXBoIj4xLDMgMiwzIDEsMTwvZGl2PgogICAgICAgICAgICA8ZGl2PnRoaXMgaGFzIG5vIHR5cGU8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAnJycKICAgICAgICBkaXYsZGl2X2VuZCA9IG1ha2VIVE1MVGFncygiZGl2IikKCiAgICAgICAgIyBvbmx5IG1hdGNoIGRpdiB0YWcgaGF2aW5nIGEgdHlwZSBhdHRyaWJ1dGUgd2l0aCB2YWx1ZSAiZ3JpZCIKICAgICAgICBkaXZfZ3JpZCA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhBdHRyaWJ1dGUodHlwZT0iZ3JpZCIpKQogICAgICAgIGdyaWRfZXhwciA9IGRpdl9ncmlkICsgU2tpcFRvKGRpdiB8IGRpdl9lbmQpKCJib2R5IikKICAgICAgICBmb3IgZ3JpZF9oZWFkZXIgaW4gZ3JpZF9leHByLnNlYXJjaFN0cmluZyhodG1sKToKICAgICAgICAgICAgcHJpbnQoZ3JpZF9oZWFkZXIuYm9keSkKICAgICAgICAKICAgICAgICAjIGNvbnN0cnVjdCBh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AYIBbgh0A2QLgwGCAXwLkAJydnQLfAt0DnQPZgKDApACcmx8EGoQfAuOAAEAbgp8EKAQfAuhAQEAfA98EKAEfAyhAXwFQgBLAH0PfA99BXEefAR8BUsAfQR8BFMAKQxhRAoAAAogICAgSGVscGVyIG1ldGhvZCBmb3IgY29uc3RydWN0aW5nIGdyYW1tYXJzIG9mIGV4cHJlc3Npb25zIG1hZGUgdXAgb2YKICAgIG9wZXJhdG9ycyB3b3JraW5nIGluIGEgcHJlY2VkZW5jZSBoaWVyYXJjaHkuICBPcGVyYXRvcnMgbWF5IGJlIHVuYXJ5IG9yCiAgICBiaW5hcnksIGxlZnQtIG9yIHJpZ2h0LWFzc29jaWF0aXZlLiAgUGFyc2UgYWN0aW9ucyBjYW4gYWxzbyBiZSBhdHRhY2hlZAogICAgdG8gb3BlcmF0b3IgZXhwcmVzc2lvbnMuIFRoZSBnZW5lcmF0ZWQgcGFyc2VyIHdpbGwgYWxzbyByZWNvZ25pemUgdGhlIHVzZSAKICAgIG9mIHBhcmVudGhlc2VzIHRvIG92ZXJyaWRlIG9wZXJhdG9yIHByZWNlZGVuY2VzIChzZWUgZXhhbXBsZSBiZWxvdykuCiAgICAKICAgIE5vdGU6IGlmIHlvdSBkZWZpbmUgYSBkZWVwIG9wZXJhdG9yIGxpc3QsIHlvdSBtYXkgc2VlIHBlcmZvcm1hbmNlIGlzc3VlcwogICAgd2hlbiB1c2luZyBpbmZpeE5vdGF0aW9uLiBTZWUgTHtQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXR9IGZvciBhCiAgICBtZWNoYW5pc20gdG8gcG90ZW50aWFsbHkgaW1wcm92ZSB5b3VyIHBhcnNlciBwZXJmb3JtYW5jZS4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gYmFzZUV4cHIgLSBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgbW9zdCBiYXNpYyBlbGVtZW50IGZvciB0aGUgbmVzdGVkCiAgICAgLSBvcExpc3QgLSBsaXN0IG9mIHR1cGxlcywgb25lIGZvciBlYWNoIG9wZXJhdG9yIHByZWNlZGVuY2UgbGV2ZWwgaW4gdGhlCiAgICAgIGV4cHJlc3Npb24gZ3JhbW1hcjsgZWFjaCB0dXBsZSBpcyBvZiB0aGUgZm9ybQogICAgICAob3BFeHByLCBudW1UZXJtcywgcmlnaHRMZWZ0QXNzb2MsIHBhcnNlQWN0aW9uKSwgd2hlcmU6CiAgICAgICAtIG9wRXhwciBpcyB0aGUgcHlwYXJzaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBvcGVyYXRvcjsKICAgICAgICAgIG1heSBhbHNvIGJlIGEgc3RyaW5nLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIExpdGVyYWw7CiAgICAgICAgICBpZiBudW1UZXJtcyBpcyAzLCBvcEV4cHIgaXMgYSB0dXBsZSBvZiB0d28gZXhwcmVzc2lvbnMsIGZvciB0aGUKICAgICAgICAgIHR3byBvcGVyYXRvcnMgc2VwYXJhdGluZyB0aGUgMyB0ZXJtcwogICAgICAgLSBudW1UZXJtcyBpcyB0aGUgbnVtYmVyIG9mIHRlcm1zIGZvciB0aGlzIG9wZXJhdG9yIChtdXN0CiAgICAgICAgICBiZSAxLCAyLCBvciAzKQogICAgICAgLSByaWdodExlZnRBc3NvYyBpcyB0aGUgaW5kaWNhdG9yIHdoZXRoZXIgdGhlIG9wZXJhdG9yIGlzCiAgICAgICAgICByaWdodCBvciBsZWZ0IGFzc29jaWF0aXZlLCB1c2luZyB0aGUgcHlwYXJzaW5nLWRlZmluZWQKICAgICAgICAgIGNvbnN0YW50cyBDe29wQXNzb2MuUklHSFR9IGFuZCBDe29wQXNzb2MuTEVGVH0uCiAgICAgICAtIHBhcnNlQWN0aW9uIGlzIHRoZSBwYXJzZSBhY3Rpb24gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgICBleHByZXNzaW9ucyBtYXRjaGluZyB0aGlzIG9wZXJhdG9yIGV4cHJlc3Npb24gKHRoZQogICAgICAgICAgcGFyc2UgYWN0aW9uIHR1cGxlIG1lbWJlciBtYXkgYmUgb21pdHRlZCk7IGlmIHRoZSBwYXJzZSBhY3Rpb24KICAgICAgICAgIGlzIHBhc3NlZCBhIHR1cGxlIG9yIGxpc3Qgb2YgZnVuY3Rpb25zLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KICAgICAgICAgIGNhbGxpbmcgQ3tzZXRQYXJzZUFjdGlvbigqZm4pfSAoTHtQYXJzZXJFbGVtZW50LnNldFBhcnNlQWN0aW9ufSkKICAgICAtIGxwYXIgLSBleHByZXNzaW9uIGZvciBtYXRjaGluZyBsZWZ0LXBhcmVudGhlc2VzIChkZWZhdWx0PUN7U3VwcHJlc3MoJygnKX0pCiAgICAgLSBycGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgcmlnaHQtcGFyZW50aGVzZXMgKGRlZmF1bHQ9Q3tTdXBwcmVzcygnKScpfSkKCiAgICBFeGFtcGxlOjoKICAgICAgICAjIHNpbXBsZSBleGFtcGxlIG9mIGZvdXItZnVuY3Rpb24gYXJpdGhtZXRpYyB3aXRoIGludHMgYW5kIHZhcmlhYmxlIG5hbWVzCiAgICAgICAgaW50ZWdlciA9IHB5cGFyc2luZ19jb21tb24uc2lnbmVkX2ludGVnZXIKICAgICAgICB2YXJuYW1lID0gcHlwYXJzaW5nX2NvbW1vbi5pZGVudGlmaWVyIAogICAgICAgIAogICAgICAgIGFyaXRoX2V4cHIgPSBpbmZpeE5vdGF0aW9uKGludGVnZXIgfCB2YXJuYW1lLAogICAgICAgICAgICBbCiAgICAgICAgICAgICgnLScsIDEsIG9wQXNzb2MuUklHSFQpLAogICAgICAgICAgICAob25lT2YoJyogLycpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICAob25lT2YoJysgLScpLCAyLCBvcEFzc29jLkxFRlQpLAogICAgICAgICAgICBdKQogICAgICAgIAogICAgICAgIGFyaXRoX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgIDUrMyo2CiAgICAgICAgICAgICg1KzMpKjYKICAgICAgICAgICAgLTItLTExCiAgICAgICAgICAgICcnJywgZnVsbER1bXA9RmFsc2UpCiAgICBwcmludHM6OgogICAgICAgIDUrMyo2CiAgICAgICAgW1s1LCAnKycsIFszLCAnKicsIDZdXV0KCiAgICAgICAgKDUrMykqNgogICAgICAgIFtbWzUsICcrJywgM10sICcqJywgNl1dCgogICAgICAgIC0yLS0xMQogICAgICAgIFtbWyctJywgMl0sICctJywgWyctJywgMTFdXV0KICAgIHKJAAAATnK2AgAAcnEAAAB6ByVzIHRlcm16CSVzJXMgdGVybXJzAAAAekBpZiBudW10ZXJtcz0zLCBvcEV4cHIgbXVzdCBiZSBhIHR1cGxlIG9yIGxpc3Qgb2YgdHdvIGV4cHJlc3Npb25zco0AAAB6Nm9wZXJhdG9yIG11c3QgYmUgdW5hcnkgKDEpLCBiaW5hcnkgKDIpLCBvciB0ZXJuYXJ5ICgzKXoyb3BlcmF0b3IgbXVzdCBpbmRpY2F0ZSByaWdodCBvciBsZWZ0IGFzc29jaWF0aXZpdHkpEXIRAAAAcv0AAABy+AAAAHJAAgAAcroBAAByVgAAANoETEVGVHIQAAAAchMAAAByGwAAANoFUklHSFRyfQAAAHIdAAAAcnYBAAByPwIAAHLjAAAAcoQAAAApEdoIYmFzZUV4cHLaBm9wTGlzdNoEbHBhctoEcnBhcnKHAAAA2ghsYXN0RXhwcnLQAAAA2gdvcGVyRGVm2gZvcEV4cHLaBWFyaXR52g5yaWdodExlZnRBc3NvY3LUAQAA2gh0ZXJtTmFtZdoHb3BFeHByMdoHb3BFeHByMtoIdGhpc0V4cHJyfwMAAHJ5AAAAcnkAAAByegAAAHJrAAAArBMAAHNaAAAAAD0GARABEgEYARgBCAEUAQgBCAEMAQwBCAEeAQoBCAEmAh4BCgEWARb/BgMKAQwBCgIMAQgBHAEKAQoBJgIeAQoBFgEW/wYDCgIIAQYBEAEMAgoBEgEGAQgBcmsAAAB6NCIoPzpbXiJcblxyXFxdfCg/OiIiKXwoPzpcXCg/OlteeF18eFswLTlhLWZBLUZdKykpKSr6ASJ6IHN0cmluZyBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzejQnKD86W14nXG5cclxcXXwoPzonJyl8KD86XFwoPzpbXnhdfHhbMC05YS1mQS1GXSspKSkq+gEneiBzdHJpbmcgZW5jbG9zZWQgaW4gc2luZ2xlIHF1b3Rlc3oqcXVvdGVkU3RyaW5nIHVzaW5nIHNpbmdsZSBvciBkb3VibGUgcXVvdGVz2gF1ehZ1bmljb2RlIHN0cmluZyBsaXRlcmFsYwQAAAAAAAAAAAAAAAUAAAAHAAAAQwAAAHOeAQAAfAB8AWsCchB0AGQBgwGCAXwCZAJ1AJABcip0AXwAdAKDApABciJ0AXwBdAKDApABciJ0A3wAgwFkA2sCcqh0A3wBgwFkA2sCcqh8A2QCdQFygnQEdAV8Aw8AdAZ8AHwBFwB0B2oIFwBkA2QEjQIXAIMBgwGgCWQFZAaEAKEBfQJuJHQKoAuhAHQGfAB8ARcAdAdqCBcAgwGgCWQHZAaEAKEBFwB9Am54fANkAnUBcux0BHQFfAMPAHQMfACDAQ8AFwB0DHwBgwEPABcAdAZ0B2oIZANkBI0CFwCDAYMBoAlkCGQGhAChAX0CbjR0BHQFdAx8AIMBDwB0DHwBgwEPABcAdAZ0B2oIZANkBI0CFwCDAYMBoAlkCWQGhAChAX0Cbgh0AGQKgwGCAXQNgwB9BHwDZAJ1AZABcmR8BHQOdA98AIMBdBB8A3wEQgB8AkIAgwEXAHQPfAGDARcAgwFLAH0EbiR8BHQOdA98AIMBdBB8BHwCQgCDARcAdA98AYMBFwCDAUsAfQR8BKARZAt8AHwBZgIWAKEBAQB8BFMAKQxhfgkAAAogICAgSGVscGVyIG1ldGhvZCBmb3IgZGVmaW5pbmcgbmVzdGVkIGxpc3RzIGVuY2xvc2VkIGluIG9wZW5pbmcgYW5kIGNsb3NpbmcKICAgIGRlbGltaXRlcnMgKCIoIiBhbmQgIikiIGFyZSB0aGUgZGVmYXVsdCkuCgogICAgUGFyYW1ldGVyczoKICAgICAtIG9wZW5lciAtIG9wZW5pbmcgY2hhcmFjdGVyIGZvciBhIG5lc3RlZCBsaXN0IChkZWZhdWx0PUN7IigifSk7IGNhbiBhbHNvIGJlIGEgcHlwYXJzaW5nIGV4cHJlc3Npb24KICAgICAtIGNsb3NlciAtIGNsb3NpbmcgY2hhcmFjdGVyIGZvciBhIG5lc3RlZCBsaXN0IChkZWZhdWx0PUN7IikifSk7IGNhbiBhbHNvIGJlIGEgcHlwYXJzaW5nIGV4cHJlc3Npb24KICAgICAtIGNvbnRlbnQgLSBleHByZXNzaW9uIGZvciBpdGVtcyB3aXRoaW4gdGhlIG5lc3RlZCBsaXN0cyAoZGVmYXVsdD1De05vbmV9KQogICAgIC0gaWdub3JlRXhwciAtIGV4cHJlc3Npb24gZm9yIGlnbm9yaW5nIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGVsaW1pdGVycyAoZGVmYXVsdD1De3F1b3RlZFN0cmluZ30pCgogICAgSWYgYW4gZXhwcmVzc2lvbiBpcyBub3QgcHJvdmlkZWQgZm9yIHRoZSBjb250ZW50IGFyZ3VtZW50LCB0aGUgbmVzdGVkCiAgICBleHByZXNzaW9uIHdpbGwgY2FwdHVyZSBhbGwgd2hpdGVzcGFjZS1kZWxpbWl0ZWQgY29udGVudCBiZXR3ZWVuIGRlbGltaXRlcnMKICAgIGFzIGEgbGlzdCBvZiBzZXBhcmF0ZSB2YWx1ZXMuCgogICAgVXNlIHRoZSBDe2lnbm9yZUV4cHJ9IGFyZ3VtZW50IHRvIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IG1heSBjb250YWluCiAgICBvcGVuaW5nIG9yIGNsb3NpbmcgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBvcGVuaW5nCiAgICBvciBjbG9zaW5nIGNoYXJhY3RlcnMgZm9yIG5lc3RpbmcsIHN1Y2ggYXMgcXVvdGVkU3RyaW5nIG9yIGEgY29tbWVudAogICAgZXhwcmVzc2lvbi4gIFNwZWNpZnkgbXVsdGlwbGUgZXhwcmVzc2lvbnMgdXNpbmcgYW4gQ3tMe09yfX0gb3IgQ3tMe01hdGNoRmlyc3R9fS4KICAgIFRoZSBkZWZhdWx0IGlzIEx7cXVvdGVkU3RyaW5nfSwgYnV0IGlmIG5vIGV4cHJlc3Npb25zIGFyZSB0byBiZSBpZ25vcmVkLAogICAgdGhlbiBwYXNzIEN7Tm9uZX0gZm9yIHRoaXMgYXJndW1lbnQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGF0YV90eXBlID0gb25lT2YoInZvaWQgaW50IHNob3J0IGxvbmcgY2hhciBmbG9hdCBkb3VibGUiKQogICAgICAgIGRlY2xfZGF0YV90eXBlID0gQ29tYmluZShkYXRhX3R5cGUgKyBPcHRpb25hbChXb3JkKCcqJykpKQogICAgICAgIGlkZW50ID0gV29yZChhbHBoYXMrJ18nLCBhbHBoYW51bXMrJ18nKQogICAgICAgIG51bWJlciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyCiAgICAgICAgYXJnID0gR3JvdXAoZGVjbF9kYXRhX3R5cGUgKyBpZGVudCkKICAgICAgICBMUEFSLFJQQVIgPSBtYXAoU3VwcHJlc3MsICIoKSIpCgogICAgICAgIGNvZGVfYm9keSA9IG5lc3RlZEV4cHIoJ3snLCAnfScsIGlnbm9yZUV4cHI9KHF1b3RlZFN0cmluZyB8IGNTdHlsZUNvbW1lbnQpKQoKICAgICAgICBjX2Z1bmN0aW9uID0gKGRlY2xfZGF0YV90eXBlKCJ0eXBlIikgCiAgICAgICAgICAgICAgICAgICAgICArIGlkZW50KCJuYW1lIikKICAgICAgICAgICAgICAgICAgICAgICsgTFBBUiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QoYXJnKSwgW10pKCJhcmdzIikgKyBSUEFSIAogICAgICAgICAgICAgICAgICAgICAgKyBjb2RlX2JvZHkoImJvZHkiKSkKICAgICAgICBjX2Z1bmN0aW9uLmlnbm9yZShjU3R5bGVDb21tZW50KQogICAgICAgIAogICAgICAgIHNvdXJjZV9jb2RlID0gJycnCiAgICAgICAgICAgIGludCBpc19vZGQoaW50IHgpIHsgCiAgICAgICAgICAgICAgICByZXR1cm4gKHglMik7IAogICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgaW50IGRlY190b19oZXgoY2hhciBoY2hhcikgeyAKICAgICAgICAgICAgICAgIGlmIChoY2hhciA+PSAnMCcgJiYgaGNoYXIgPD0gJzknKSB7IAogICAgICAgICAgICAgICAgICAgIHJldHVybiAob3JkKGhjaGFyKS1vcmQoJzAnKSk7IAogICAgICAgICAgICAgICAgfSBlbHNlIHsgCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgxMCtvcmQoaGNoYXIpLW9yZCgnQScpKTsKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0KICAgICAgICAnJycKICAgICAgICBmb3IgZnVuYyBpbiBjX2Z1bmN0aW9uLnNlYXJjaFN0cmluZyhzb3VyY2VfY29kZSk6CiAgICAgICAgICAgIHByaW50KCIlKG5hbWUpcyAoJSh0eXBlKXMpIGFyZ3M6ICUoYXJncylzIiAlIGZ1bmMpCgogICAgcHJpbnRzOjoKICAgICAgICBpc19vZGQgKGludCkgYXJnczogW1snaW50JywgJ3gnXV0KICAgICAgICBkZWNfdG9faGV4IChpbnQpIGFyZ3M6IFtbJ2NoYXInLCAnaGNoYXInXV0KICAgIHoub3BlbmluZyBhbmQgY2xvc2luZyBzdHJpbmdzIGNhbm5vdCBiZSB0aGUgc2FtZU5yjQAAAHKDAwAAYwEAAAAAAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAoAChAFMActIAAACpAXK7AAAAcncAAAByeQAAAHJ5AAAAcnoAAAByewAAAGcUAAByfAAAAHocbmVzdGVkRXhwci48bG9jYWxzPi48bGFtYmRhPmMBAAAAAAAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAKAAoQBTAHLSAAAAcskDAABydwAAAHJ5AAAAcnkAAAByegAAAHJ7AAAAahQAAHJ8AAAAYwEAAAAAAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAoAChAFMActIAAAByyQMAAHJ3AAAAcnkAAAByeQAAAHJ6AAAAcnsAAABwFAAAcnwAAABjAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQCgAKEAUwBy0gAAAHLJAwAAcncAAAByeQAAAHJ5AAAAcnoAAAByewAAAHQUAAByfAAAAHpPb3BlbmluZyBhbmQgY2xvc2luZyBhcmd1bWVudHMgbXVzdCBiZSBzdHJpbmdzIGlmIG5vIGNvbnRlbnQgZXhwcmVzc2lvbiBpcyBnaXZlbnoWbmVzdGVkICVzJXMgZXhwcmVzc2lvbikSckACAAByfQAAAHLoAAAAcvgAAAByDAAAAHIbAAAAcgsAAAByJgAAAHKcAQAAcoQAAAByRQAAAHLpAAAAchcAAAByEQAAAHITAAAAci0AAAByNAAAAHK6AQAAKQXaBm9wZW5lctoGY2xvc2Vy2gdjb250ZW50cjIDAAByhwAAAHJ5AAAAcnkAAAByegAAAHJSAAAAJRQAAHNIAAAAADoIAQgBCgEYARgBCAEIART/CAIG/gYEGAEG/wgDCAEIAQj/AgEI/wICDP4IAwb9BgUWAQz/CAIG/gYECAEGAQoBKgIkARIBclIAAABjAwAAAAAAAAAAAAAACwAAAAYAAAADAAAAc+QAAACHAGYBZAFkAoQIfQOHAGYBZANkBIQIfQSHAGYBZAVkBoQIfQV0AHQBgwCgAmQHoQGgA6EAgwF9BnQEgwB0BIMAoAV8BKEBFwCgBmQIoQF9B3QEgwCgBXwDoQGgBmQJoQF9CHQEgwCgBXwFoQGgBmQKoQF9CXwCcqZ0B3QIfAaDAXwHFwB0AHwIdAd8AIMBFwB0CHwGgwEXAIMBFwB8CRcAgwF9Cm4kdAd0CHwGgwF0AHwIdAd8AIMBFwB0CHwGgwEXAIMBFwCDAX0KfACgCXQKdAGDABcAoQEBAHwKoAZkC6EBUwApDGEKCQAACiAgICBIZWxwZXIgbWV0aG9kIGZvciBkZWZpbmluZyBzcGFjZS1kZWxpbWl0ZWQgaW5kZW50YXRpb24gYmxvY2tzLCBzdWNoIGFzCiAgICB0aG9zZSB1c2VkIHRvIGRlZmluZSBibG9jayBzdGF0ZW1lbnRzIGluIFB5dGhvbiBzb3VyY2UgY29kZS4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gYmxvY2tTdGF0ZW1lbnRFeHByIC0gZXhwcmVzc2lvbiBkZWZpbmluZyBzeW50YXggb2Ygc3RhdGVtZW50IHRoYXQKICAgICAgICAgICAgaXMgcmVwZWF0ZWQgd2l0aGluIHRoZSBpbmRlbnRlZCBibG9jawogICAgIC0gaW5kZW50U3RhY2sgLSBsaXN0IGNyZWF0ZWQgYnkgY2FsbGVyIHRvIG1hbmFnZSBpbmRlbnRhdGlvbiBzdGFjawogICAgICAgICAgICAobXVsdGlwbGUgc3RhdGVtZW50V2l0aEluZGVudGVkQmxvY2sgZXhwcmVzc2lvbnMgd2l0aGluIGEgc2luZ2xlIGdyYW1tYXIKICAgICAgICAgICAgc2hvdWxkIHNoYXJlIGEgY29tbW9uIGluZGVudFN0YWNrKQogICAgIC0gaW5kZW50IC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYmxvY2sgbXVzdCBiZSBpbmRlbnRlZCBiZXlvbmQgdGhlCiAgICAgICAgICAgIHRoZSBjdXJyZW50IGxldmVsOyBzZXQgdG8gRmFsc2UgZm9yIGJsb2NrIG9mIGxlZnQtbW9zdCBzdGF0ZW1lbnRzCiAgICAgICAgICAgIChkZWZhdWx0PUN7VHJ1ZX0pCgogICAgQSB2YWxpZCBibG9jayBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIEN7YmxvY2tTdGF0ZW1lbnR9LgoKICAgIEV4YW1wbGU6OgogICAgICAgIGRhdGEgPSAnJycKICAgICAgICBkZWYgQSh6KToKICAgICAgICAgIEExCiAgICAgICAgICBCID0gMTAwCiAgICAgICAgICBHID0gQTIKICAgICAgICAgIEEyCiAgICAgICAgICBBMwogICAgICAgIEIKICAgICAgICBkZWYgQkIoYSxiLGMpOgogICAgICAgICAgQkIxCiAgICAgICAgICBkZWYgQkJBKCk6CiAgICAgICAgICAgIGJiYTEKICAgICAgICAgICAgYmJhMgogICAgICAgICAgICBiYmEzCiAgICAgICAgQwogICAgICAgIEQKICAgICAgICBkZWYgc3BhbSh4LHkpOgogICAgICAgICAgICAgZGVmIGVnZ3Moeik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICcnJwoKCiAgICAgICAgaW5kZW50U3RhY2sgPSBbMV0KICAgICAgICBzdG10ID0gRm9yd2FyZCgpCgogICAgICAgIGlkZW50aWZpZXIgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgIGZ1bmNEZWNsID0gKCJkZWYiICsgaWRlbnRpZmllciArIEdyb3VwKCAiKCIgKyBPcHRpb25hbCggZGVsaW1pdGVkTGlzdChpZGVudGlmaWVyKSApICsgIikiICkgKyAiOiIpCiAgICAgICAgZnVuY19ib2R5ID0gaW5kZW50ZWRCbG9jayhzdG10LCBpbmRlbnRTdGFjaykKICAgICAgICBmdW5jRGVmID0gR3JvdXAoIGZ1bmNEZWNsICsgZnVuY19ib2R5ICkKCiAgICAgICAgcnZhbHVlID0gRm9yd2FyZCgpCiAgICAgICAgZnVuY0NhbGwgPSBHcm91cChpZGVudGlmaWVyICsgIigiICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChydmFsdWUpKSArICIpIikKICAgICAgICBydmFsdWUgPDwgKGZ1bmNDYWxsIHwgaWRlbnRpZmllciB8IFdvcmQobnVtcykpCiAgICAgICAgYXNzaWdubWVudCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiPSIgKyBydmFsdWUpCiAgICAgICAgc3RtdCA8PCAoIGZ1bmNEZWYgfCBhc3NpZ25tZW50IHwgaWRlbnRpZmllciApCgogICAgICAgIG1vZHVsZV9ib2R5ID0gT25lT3JNb3JlKHN0bXQpCgogICAgICAgIHBhcnNlVHJlZSA9IG1vZHVsZV9ib2R5LnBhcnNlU3RyaW5nKGRhdGEpCiAgICAgICAgcGFyc2VUcmVlLnBwcmludCgpCiAgICBwcmludHM6OgogICAgICAgIFtbJ2RlZicsCiAgICAgICAgICAnQScsCiAgICAgICAgICBbJygnLCAneicsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydBMSddLCBbWydCJywgJz0nLCAnMTAwJ11dLCBbWydHJywgJz0nLCAnQTInXV0sIFsnQTInXSwgWydBMyddXV0sCiAgICAgICAgICdCJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ0JCJywKICAgICAgICAgIFsnKCcsICdhJywgJ2InLCAnYycsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydCQjEnXSwgW1snZGVmJywgJ0JCQScsIFsnKCcsICcpJ10sICc6JywgW1snYmJhMSddLCBbJ2JiYTInXSwgWydiYmEzJ11dXV1dXSwKICAgICAgICAgJ0MnLAogICAgICAgICAnRCcsCiAgICAgICAgIFsnZGVmJywKICAgICAgICAgICdzcGFtJywKICAgICAgICAgIFsnKCcsICd4JywgJ3knLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1tbJ2RlZicsICdlZ2dzJywgWycoJywgJ3onLCAnKSddLCAnOicsIFtbJ3Bhc3MnXV1dXV1dXSAKICAgIGMDAAAAAAAAAAAAAAAEAAAABAAAABMAAABzTgAAAHwBdAB8AIMBawVyEGQAUwB0AXwBfACDAn0DfAOIAGQBGQBrA3JKfAOIAGQBGQBrBHI+dAJ8AHwBZAKDA4IBdAN8AHwBZAODA4IBZABTACkE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THtjb252ZXJ0VG9JbnRlZ2VyfX0KICAgICAtIEN7THtjb252ZXJ0VG9GbG9hdH19CiAgICAgLSBDe0x7Y29udmVydFRvRGF0ZX19CiAgICAgLSBDe0x7Y29udmVydFRvRGF0ZXRpbWV9fQogICAgIC0gQ3tMe3N0cmlwSFRNTFRhZ3N9fQogICAgIC0gQ3tMe3VwY2FzZVRva2Vuc319CiAgICAgLSBDe0x7ZG93bmNhc2VUb2tlbnN9fQoKICAgIEV4YW1wbGU6OgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mbnVtYmVyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgICAgIDEwMAogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICsxMDAKICAgICAgICAgICAgMy4xNDE1OQogICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5oZXhfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgICAgICAxMDAKICAgICAgICAgICAgRkYKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmZyYWN0aW9uLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGZyYWN0aW9ucwogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24ubWl4ZWRfaW50ZWdlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBtaXhlZCBmcmFjdGlvbnMKICAgICAgICAgICAgMQogICAgICAgICAgICAxLzIKICAgICAgICAgICAgLTMvNAogICAgICAgICAgICAxLTMvNAogICAgICAgICAgICAnJycpCgogICAgICAgIGltcG9ydCB1dWlkCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHV1aWQuVVVJRCkpCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi51dWlkLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIHV1aWQKICAgICAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgICAgICcnJykKICAgIHByaW50czo6CiAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgdHlwZQogICAgICAgIDEwMAogICAgICAgIFsxMDBdCgogICAgICAgIC0xMDAKICAgICAgICBbLTEwMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDBdCgogICAgICAgIDMuMTQxNTkKICAgICAgICBbMy4xNDE1OV0KCiAgICAgICAgNi4wMmUyMwogICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgMWUtMTIKICAgICAgICBbMWUtMTJdCgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgZmxvYXQKICAgICAgICAxMDAKICAgICAgICBbMTAwLjBdCgogICAgICAgIC0xMDAKICAgICAgICBbLTEwMC4wXQoKICAgICAgICArMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGhleCBudW1iZXJzCiAgICAgICAgMTAwCiAgICAgICAgWzI1Nl0KCiAgICAgICAgRkYKICAgICAgICBbMjU1XQoKICAgICAgICAjIGZyYWN0aW9ucwogICAgICAgIDEvMgogICAgICAgIFswLjVdCgogICAgICAgIC0zLzQKICAgICAgICBbLTAuNzVdCgogICAgICAgICMgbWl4ZWQgZnJhY3Rpb25zCiAgICAgICAgMQogICAgICAgIFsxXQoKICAgICAgICAxLzIKICAgICAgICBbMC41XQoKICAgICAgICAtMy80CiAgICAgICAgWy0wLjc1XQoKICAgICAgICAxLTMvNAogICAgICAgIFsxLjc1XQoKICAgICAgICAjIHV1aWQKICAgICAgICAxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgKICAgICAgICBbVVVJRCgnMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4JyldCiAgICDaB2ludGVnZXJ6C2hleCBpbnRlZ2VycoQDAAB6CFsrLV0/XGQreg5zaWduZWQgaW50ZWdlcnKbAwAA2ghmcmFjdGlvbmMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzEAAAAHwAZAEZAHwAZAIZABsAUwApA05yAQAAAHJ0AAAAcnkAAABydwAAAHJ5AAAAcnkAAAByegAAAHJ7AAAAtBUAAHJ8AAAAehlweXBhcnNpbmdfY29tbW9uLjxsYW1iZGE+cvICAAB6ImZyYWN0aW9uIG9yIG1peGVkIGludGVnZXItZnJhY3Rpb256DVsrLV0/XGQrXC5cZCp6C3JlYWwgbnVtYmVyeitbKy1dP1xkKyhbZUVdWystXT9cZCt8XC5cZCooW2VFXVsrLV0/XGQrKT8peiRyZWFsIG51bWJlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb256HVsrLV0/XGQrXC4/XGQqKFtlRV1bKy1dP1xkKyk/2gdmbnVtYmVycgQDAADaCmlkZW50aWZpZXJ6SygyNVswLTVdfDJbMC00XVswLTldfDE/WzAtOV17MSwyfSkoXC4oMjVbMC01XXwyWzAtNF1bMC05XXwxP1swLTldezEsMn0pKXszfXoMSVB2NCBhZGRyZXNzehBbMC05YS1mQS1GXXsxLDR92gtoZXhfaW50ZWdlcnKeAwAA6QcAAAB6EWZ1bGwgSVB2NiBhZGRyZXNzKQJyAQAAAHKNAQAAegI6OnoSc2hvcnQgSVB2NiBhZGRyZXNzYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHMWAAAAdABkAWQChAB8AEQAgwGDAWQDawBTACkETmMBAAAAAAAAAAAAAAACAAAABAAAAHMAAABzHgAAAHwAXRZ9AXQAagGgAnwBoQFyAmQAVgABAHECZAFTAHJJAQAAKQNycAAAANoKX2lwdjZfcGFydHIlAgAAcl8DAAByeQAAAHJ5AAAAcnoAAAByjAAAANAVAAByfAAAAHoscHlwYXJzaW5nX2NvbW1vbi48bGFtYmRhPi48bG9jYWxzPi48Z2VuZXhwcj5yhwMAACkBchMDAABydwAAAHJ5AAAAcnkAAAByegAAAHJ7AAAA0BUAAHJ8AAAAegc6OmZmZmY6ehJtaXhlZCBJUHY2IGFkZHJlc3N6DElQdjYgYWRkcmVzc3o6WzAtOWEtZkEtRl17Mn0oWzouLV0pWzAtOWEtZkEtRl17Mn0oPzpcMVswLTlhLWZBLUZdezJ9KXs0fXoLTUFDIGFkZHJlc3P6CCVZLSVtLSVkYwEAAAAAAAAAAAAAAAIAAAADAAAAAwAAAHMQAAAAhwBmAWQBZAKECH0BfAFTACkDYdgBAAAKICAgICAgICBIZWxwZXIgdG8gY3JlYXRlIGEgcGFyc2UgYWN0aW9uIGZvciBjb252ZXJ0aW5nIHBhcnNlZCBkYXRlIHN0cmluZyB0byBQeXRob24gZGF0ZXRpbWUuZGF0ZQoKICAgICAgICBQYXJhbXMgLQogICAgICAgICAtIGZtdCAtIGZvcm1hdCB0byBiZSBwYXNzZWQgdG8gZGF0ZXRpbWUuc3RycHRpbWUgKGRlZmF1bHQ9Q3siJVktJW0tJWQifSkKCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGRhdGVfZXhwciA9IHB5cGFyc2luZ19jb21tb24uaXNvODYwMV9kYXRlLmNvcHkoKQogICAgICAgICAgICBkYXRlX2V4cHIuc2V0UGFyc2VBY3Rpb24ocHlwYXJzaW5nX2NvbW1vbi5jb252ZXJ0VG9EYXRlKCkpCiAgICAgICAgICAgIHByaW50KGRhdGVfZXhwci5wYXJzZVN0cmluZygiMTk5OS0xMi0zMSIpKQogICAgICAgIHByaW50czo6CiAgICAgICAgICAgIFtkYXRldGltZS5kYXRlKDE5OTksIDEyLCAzMSldCiAgICAgICAgYwMAAAAAAAAAAAAAAAQAAAAKAAAAEwAAAHNQAAAAehZ0AKABfAJkARkAiAChAqACoQBXAFMABAB0A3lKAQB9AwEAehx0BHwAfAF0BXwDgwGDA4IBVwBZAGQAfQN+A24KZAB9A34DMAAwAGQAUwBy0gAAACkGcgMAAADaCHN0cnB0aW1l2gRkYXRlckACAAByIQAAAHJ/AAAAqQRykAAAAHJ/AQAAcngAAADaAnZlqQHaA2ZtdHJ5AAAAcnoAAADaBmN2dF9mbucVAABzCAAAAAABAgEWAQ4Bei5weXBhcnNpbmdfY29tbW9uLmNvbnZlcnRUb0RhdGUuPGxvY2Fscz4uY3Z0X2ZucnkAAACpAnLrAwAAcuwDAAByeQAAAHLqAwAAcnoAAADaDWNvbnZlcnRUb0RhdGXYFQAAcwQAAAAADwwFeh5weXBhcnNpbmdfY29tbW9uLmNvbnZlcnRUb0RhdGX6FCVZLSVtLSVkVCVIOiVNOiVTLiVmYwEAAAAAAAAAAAAAAAIAAAADAAAAAwAAAHMQAAAAhwBmAWQBZAKECH0BfAFTACkDYRMCAAAKICAgICAgICBIZWxwZXIgdG8gY3JlYXRlIGEgcGFyc2UgYWN0aW9uIGZvciBjb252ZXJ0aW5nIHBhcnNlZCBkYXRldGltZSBzdHJpbmcgdG8gUHl0aG9uIGRhdGV0aW1lLmRhdGV0aW1lCgogICAgICAgIFBhcmFtcyAtCiAgICAgICAgIC0gZm10IC0gZm9ybWF0IHRvIGJlIHBhc3NlZCB0byBkYXRldGltZS5zdHJwdGltZSAoZGVmYXVsdD1DeyIlWS0lbS0lZFQlSDolTTolUy4lZiJ9KQoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgZHRfZXhwciA9IHB5cGFyc2luZ19jb21tb24uaXNvODYwMV9kYXRldGltZS5jb3B5KCkKICAgICAgICAgICAgZHRfZXhwci5zZXRQYXJzZUFjdGlvbihweXBhcnNpbmdfY29tbW9uLmNvbnZlcnRUb0RhdGV0aW1lKCkpCiAgICAgICAgICAgIHByaW50KGR0X2V4cHIucGFyc2VTdHJpbmcoIjE5OTktMTItMzFUMjM6NTk6NTkuOTk5IikpCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgW2RhdGV0aW1lLmRhdGV0aW1lKDE5OTksIDEyLCAzMSwgMjMsIDU5LCA1OSwgOTk5MDAwKV0KICAgICAgICBjAwAAAAAAAAAAAAAABAAAAAoAAAATAAAAc0wAAAB6EnQAoAF8AmQBGQCIAKECVwBTAAQAdAJ5RgEAfQMBAHocdAN8AHwBdAR8A4MBgwOCAVcAWQBkAH0DfgNuCmQAfQN+AzAAMABkAFMActIAAAApBXIDAAAAcuYDAAByQAIAAHIhAAAAcn8AAABy6AMAAHLqAwAAcnkAAAByegAAAHLsAwAA/RUAAHMIAAAAAAECARIBDgF6MnB5cGFyc2luZ19jb21tb24uY29udmVydFRvRGF0ZXRpbWUuPGxvY2Fscz4uY3Z0X2ZucnkAAABy7QMAAHJ5AAAAcuoDAAByegAAANoRY29udmVydFRvRGF0ZXRpbWXuFQAAcwQAAAAADwwFeiJweXBhcnNpbmdfY29tbW9uLmNvbnZlcnRUb0RhdGV0aW1lejcoP1A8eWVhcj5cZHs0fSkoPzotKD9QPG1vbnRoPlxkXGQpKD86LSg/UDxkYXk+XGRcZCkpPyk/egxJU084NjAxIGRhdGV6hig/UDx5ZWFyPlxkezR9KS0oP1A8bW9udGg+XGRcZCktKD9QPGRheT5cZFxkKVtUIF0oP1A8aG91cj5cZFxkKTooP1A8bWludXRlPlxkXGQpKDooP1A8c2Vjb25kPlxkXGQoXC5cZCopPyk/KT8oP1A8dHo+WnxbKy1dXGRcZDo/XGRcZCk/ehBJU084NjAxIGRhdGV0aW1lejJbMC05YS1mQS1GXXs4fSgtWzAtOWEtZkEtRl17NH0pezN9LVswLTlhLWZBLUZdezEyfdoEVVVJRGMDAAAAAAAAAAAAAAADAAAABAAAAEMAAABzEAAAAHQAagGgAnwCZAEZAKEBUwApAmEHAgAACiAgICAgICAgUGFyc2UgYWN0aW9uIHRvIHJlbW92ZSBIVE1MIHRhZ3MgZnJvbSB3ZWIgcGFnZSBIVE1MIHNvdXJjZQoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgIyBzdHJpcCBIVE1MIGxpbmtzIGZyb20gbm9ybWFsIHRleHQgCiAgICAgICAgICAgIHRleHQgPSAnPHRkPk1vcmUgaW5mbyBhdCB0aGUgPGEgaHJlZj0iaHR0cDovL3B5cGFyc2luZy53aWtpc3BhY2VzLmNvbSI+cHlwYXJzaW5nPC9hPiB3aWtpIHBhZ2U8L3RkPicKICAgICAgICAgICAgdGQsdGRfZW5kID0gbWFrZUhUTUxUYWdzKCJURCIpCiAgICAgICAgICAgIHRhYmxlX3RleHQgPSB0ZCArIFNraXBUbyh0ZF9lbmQpLnNldFBhcnNlQWN0aW9uKHB5cGFyc2luZ19jb21tb24uc3RyaXBIVE1MVGFncykoImJvZHkiKSArIHRkX2VuZAogICAgICAgICAgICAKICAgICAgICAgICAgcHJpbnQodGFibGVfdGV4dC5wYXJzZVN0cmluZyh0ZXh0KS5ib2R5KSAjIC0+ICdNb3JlIGluZm8gYXQgdGhlIHB5cGFyc2luZyB3aWtpIHBhZ2UnCiAgICAgICAgcgEAAAApA3JwAAAA2g5faHRtbF9zdHJpcHBlcnKFAAAAKQNykAAAAHJ/AQAAcugBAAByeQAAAHJ5AAAAcnoAAADaDXN0cmlwSFRNTFRhZ3MOFgAAcwIAAAAADXoecHlwYXJzaW5nX2NvbW1vbi5zdHJpcEhUTUxUYWdzclQDAAByoQIAAHLcAwAAct0DAAByoAAAAHKcAwAAehRjb21tYSBzZXBhcmF0ZWQgbGlzdGMBAAAAAAAAAAAAAAABAAAAAgAAAEMAAABzDAAAAHQAfACDAaABoQBTAHKJAAAAcpYDAABydwAAAHJ5AAAAcnkAAAByegAAAHJ7AAAAIhYAAHJ8AAAAYwEAAAAAAAAAAAAAAAEAAAACAAAAQwAAAHMMAAAAdAB8AIMBoAGhAFMAcokAAABylwMAAHJ3AAAAcnkAAAByeQAAAHJ6AAAAcnsAAAAlFgAAcnwAAABOKQFy5QMAACkBcu8DAAApP3KbAAAAcpwAAABynQAAAHLDAAAAcm8AAABydgAAANoQY29udmVydFRvSW50ZWdlctoFZmxvYXTaDmNvbnZlcnRUb0Zsb2F0cjEAAAByVAAAAHK6AQAAcoQAAABy3gMAAHJGAAAAcuIDAAByKQAAANoOc2lnbmVkX2ludGVnZXJy3wMAAHLOAQAAch0AAAByTQIAANoNbWl4ZWRfaW50ZWdlcnITAwAA2gRyZWFs2ghzY2lfcmVhbHIaAgAA2gZudW1iZXJy4AMAAHI2AAAAcjUAAABy4QMAANoMaXB2NF9hZGRyZXNzcuQDAADaEl9mdWxsX2lwdjZfYWRkcmVzc9oTX3Nob3J0X2lwdjZfYWRkcmVzc3LVAQAA2hNfbWl4ZWRfaXB2Nl9hZGRyZXNzcgwAAADaDGlwdjZfYWRkcmVzc9oLbWFjX2FkZHJlc3NyfwIAAHLuAwAAcvADAADaDGlzbzg2MDFfZGF0ZdoQaXNvODYwMV9kYXRldGltZdoEdXVpZHI5AAAAcjgAAABy8gMAAHLzAwAAchsAAAByFwAAAHIVAAAAclgAAAByMAAAANoNX2NvbW1hc2VwaXRlbXJCAAAAclsAAABy6QAAANoUY29tbWFfc2VwYXJhdGVkX2xpc3RyZgAAAHJEAAAAcnkAAAByeQAAAHJ5AAAAcnoAAABycAAAABcVAABzVgAAAAgBBH8ACAgFCAUUAxoDFAMiAg4CIgIKAhQDFAQQAxQDGAMOAw4BFgEyAQ4BDgEcAw4DAgEMFQIBDBUOAw4DDgMQAQIBCg4gAQr/DAEC/wQCHgMQAxABcnAAAADaCF9fbWFpbl9f2gZzZWxlY3TaBGZyb21yjQIAAHJNAwAAKQFyVgMAANoHY29sdW1uc3K7AQAAWgZ0YWJsZXPaB2NvbW1hbmRhSwIAAAogICAgICAgICMgJyonIGFzIGNvbHVtbiBsaXN0IGFuZCBkb3R0ZWQgdGFibGUgbmFtZQogICAgICAgIHNlbGVjdCAqIGZyb20gU1lTLlhZWlpZCgogICAgICAgICMgY2FzZWxlc3MgbWF0Y2ggb24gIlNFTEVDVCIsIGFuZCBjYXN0cyBiYWNrIHRvICJzZWxlY3QiCiAgICAgICAgU0VMRUNUICogZnJvbSBYWVpaWSwgQUJDCgogICAgICAgICMgbGlzdCBvZiBjb2x1bW4gbmFtZXMsIGFuZCBtaXhlZCBjYXNlIFNFTEVDVCBrZXl3b3JkCiAgICAgICAgU2VsZWN0IEFBLEJCLENDIGZyb20gU3lzLmR1YWwKCiAgICAgICAgIyBtdWx0aXBsZSB0YWJsZXMKICAgICAgICBTZWxlY3QgQSwgQiwgQyBmcm9tIFN5cy5kdWFsLCBUYWJsZTIKCiAgICAgICAgIyBpbnZhbGlkIFNFTEVDVCBrZXl3b3JkIC0gc2hvdWxkIGZhaWwKICAgICAgICBYZWxlY3QgQSwgQiwgQyBmcm9tIFN5cy5kdWFsCgogICAgICAgICMgaW5jb21wbGV0ZSBjb21tYW5kIC0gc2hvdWxkIGZhaWwKICAgICAgICBTZWxlY3QKCiAgICAgICAgIyBpbnZhbGlkIGNvbHVtbiBuYW1lIC0gc2hvdWxkIGZhaWwKICAgICAgICBTZWxlY3QgXl5eIGZyb3ggU3lzLmR1YWwKCiAgICAgICAgel0KICAgICAgICAxMDAKICAgICAgICAtMTAwCiAgICAgICAgKzEwMAogICAgICAgIDMuMTQxNTkKICAgICAgICA2LjAyZTIzCiAgICAgICAgMWUtMTIKICAgICAgICB6IAogICAgICAgIDEwMAogICAgICAgIEZGCiAgICAgICAgejYKICAgICAgICAxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgKICAgICAgICApAXJzAAAAKQJyVAMAAEYpAU4pAkZUKQFUKQFyoAAAACkBVCnjcsMAAADaC19fdmVyc2lvbl9f2g9fX3ZlcnNpb25UaW1lX1/aCl9fYXV0aG9yX19yoQAAANoHd2Vha3JlZnICAAAAcvMAAABy6QAAAHKCAAAAcjQCAAByswEAAHK+AgAAcgwCAAByZgEAAHKHAQAAcvoBAAByAwAAANoHX3RocmVhZHIEAAAA2gtJbXBvcnRFcnJvctoJdGhyZWFkaW5n2g9jb2xsZWN0aW9ucy5hYmNyBQAAAHIGAAAAcgcAAAByBgIAAFoLb3JkZXJlZGRpY3TaB19fYWxsX19yPwIAANoMdmVyc2lvbl9pbmZvcoYBAAByRQEAANoHbWF4c2l6ZXKAAgAAcn8AAABy6AAAANoDY2hycoUDAAByiAAAAHITAwAAcvgAAAByYAEAANoIcmV2ZXJzZWRy4wAAAHL2AQAAcmIBAABy7QIAAHKvAgAAcrACAABylQEAAFoGbWF4aW502gZ4cmFuZ2Vy+QAAANoLX19idWlsdGluX19ykQAAANoFZm5hbWVyJAEAAHKWAQAAcrIAAABywQAAAHLlAAAAcpkAAABy1gAAAHKaAAAA2g9hc2NpaV91cHBlcmNhc2XaD2FzY2lpX2xvd2VyY2FzZXI2AAAAclQAAAByRgAAAHI1AAAAcmsDAAByugAAANoJcHJpbnRhYmxlclgAAABylwEAAHIfAAAAciEAAAByIwAAAHIlAAAAcigAAAByygAAAHIkAAAA2ghyZWdpc3RlcnI7AAAAckwAAABySQAAAHJ3AQAAcnsBAAByfQEAAHJTAAAAcpsBAAByJgAAAHIuAAAAcg8AAAByGQAAAHIXAAAAcp8DAAByoAEAAHIUAAAAcgoAAAByCQAAAHJuAAAAcjEAAAByKQAAAHInAAAAcgsAAAByMAAAAHLhAgAAchIAAAByFgAAAHIVAAAAciwAAAByKwAAAHIzAAAAcjIAAAByIgAAAHIIAAAAch4AAAByGAAAAHIOAAAAciAAAAByEAAAAHIaAAAAciQDAAByGwAAAHI0AAAAcjADAAByMQMAAHIdAAAAcioAAAByEQAAAHJAAwAAci8AAAByDAAAAHITAAAAcg0AAAByLQAAAHIcAAAAcmQAAAByQgAAAHI+AAAAcioCAAByUQAAAHJQAAAAcqsCAAByVQAAAHJDAAAAcmkAAAByagAAAHJsAAAAcroBAAByRQAAAHJLAAAAckoAAAByYwAAAHJiAAAAcoQAAADaDF9lc2NhcGVkUHVuY9oPX2VzY2FwZWRIZXhDaGFy2g9fZXNjYXBlZE9jdENoYXLaC19zaW5nbGVDaGFy2gpfY2hhclJhbmdlcr8BAAByjwMAAHJhAAAAck8AAAByXgAAAHJcAAAAcm8AAAByZgAAAHJEAAAAcqkDAAByTQAAAHJOAAAAcmcAAAByrAMAAHJtAAAAclYAAABytwMAAHK4AwAAcmsAAAByVwAAAHJAAAAAcmAAAAByWwAAAHJlAAAAclIAAAByaAAAAHI3AAAAclkAAAByOQAAAHI4AAAAcuYAAABykgAAAHLaAwAAchUBAAByPQAAAHJdAAAAcjoAAAByRwAAAHJPAgAAcl8AAAByQQAAAHI/AAAAckgAAAByWgAAAHIaAgAAcgUEAAByPAAAAHJwAAAAcpsAAABaC3NlbGVjdFRva2VuWglmcm9tVG9rZW7aBWlkZW50Wgpjb2x1bW5OYW1lWg5jb2x1bW5OYW1lTGlzdFoKY29sdW1uU3BlY1oJdGFibGVOYW1lWg10YWJsZU5hbWVMaXN0WglzaW1wbGVTUUxyfgIAAHL7AwAAcuADAABy4gMAAHIEBAAAcvEDAAByeQAAAHJ5AAAAcnkAAAByegAAANoIPG1vZHVsZT4aAAAAc9QBAAAC/wI0BAEEAQQCCAEMAQgBCAEIAQgBCAEIAQgBCAEIAQwCAgEQAQwBEgICAgwBEAEMAgwBEgICARABDgECARABDgEQBAgVEgEMAQYBBgEEAQQBBAMcAwYBBAIIFQQBCAEMAQIBFAEOARACFgIIChADDAEEAQgBCAEIARYCEDgQFRAFEBMQCBAKEH8AfwB/AH8AfwAHCgIIDQgMCAoIAwgDCAMIGwxAEH8AfwB/AH8AfwB/AH8AfwB/AHYQCBALEA8QJgQBBgIQQRAXEBIQPRB/ACAQSRB/AAoQRxAzEAcQGhAeEBQQDxASEBQQFxBwEEwQTxBEEHwQTRAaECAQJhAjEB8QBwYBEEAQcxBREAQQCBAsEBUQQRAaEBAILAwTDB8ICQgcCBwICAxJCCMMJQgHCBkMAQwBDAEMAQwCGAESARIBGAEUATACCBgICggOCA4ILAwDDAMIHQgTCAkIPwgCDCMGAQgBCAIWcAQDFgEWAQwBCv8GAQL/BAIaAhZaDHIIAQgCHAESASABCAUWAw4DEgEOAxoDBAMSAxABCgEI/wIBBv8E/wwCBP4EAyIFFH8AfwAUDAIKAQoCEAIYARQBCgIYARQCIgMMGA4KDgkOBQgBEgE=