VQ0NCgAAAADJuIxjd4oDAOMAAAAAAAAAAAAAAAAAAAAAaQAAAEAAAABz1gsAAGQAWgBkAVoBZAJaAmQDWgNkBGQFbARaBGQEZAZsBW0GWgcBAGQEZAVsCFoIZARkBWwJWglkBGQFbApaCmQEZAVsC1oLZARkBWwMWgxkBGQFbA1aDWQEZAVsDloOZARkBWwPWg9kBGQFbBBaEGQEZAdsEW0RWhEBAHoQZARkCGwSbRNaEwEAVwBuIAQAZRRrCnKoAQABAAEAZARkCGwVbRNaEwEAWQBuAlgAehxkBGQJbBZtF1oXAQBkBGQKbBZtGFoYAQBXAG4sBABlFGsKcvIBAAEAAQBkBGQJbA1tF1oXAQBkBGQKbA1tGFoYAQBZAG4CWAB6EGQEZAtsDW0ZWhoBAFcAbkIEAGUUawqQAXJGAQABAAEAehBkBGQLbBttGVoaAQBXAG4aBABlFGsKkAFyQAEAAQABAGQFWhpZAG4CWABZAG4CWABkDGQNZA5kD2QQZBFkEmQTZBRkFWQWZBdkGGQZZBpkG2QcZB1kHmQfZCBkIWQiZCNkJGQlZCZkJ2QoZClkKmQrZCxkLWQuZC9kMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWQ6ZDtkPGQ9ZD5kP2RAZEFkQmRDZERkRWRGZEdkSGRJZEpkS2RMZE1kTmRPZFBkUWRSZFNkVGRVZFZkV2RYZFlkWmRbZFxkXWReZF9kYGRhZGJkY2RkZGVkZmRnZGhkaWRqZGtkbGRtZG5kb2RwZHFkcmRzZHRnaVocZR1lCWoegwFkBWR1hQIZAFofZR9kBBkAZHVrAlogZSCQAnJwZQlqIVoiZSNaJGUlWiZlI1onZShlKWUqZStlLGUdZS1lLmUvZTBlMWcLWjJuYGUJajNaImU0WjVkdmR3hABaJ2cAWjJkBGQFbDZaNmR4oDehAEQAXThaOHoUZTKgOWU6ZTZlOIMCoQEBAFcAbhwEAGU7awqQAnLKAQABAAEAWQCQAnGWWQBuAlgAkAJxlmU8ZHlkeoQAZTVke4MBRACDAYMBWj1kfGR9hABaPkcAZH5kf4QAZH9lP4MDWkBlBGpBZQRqQhcAWkNkgFpEZURkgRcAWkVlQ2VEFwBaRmUlZIKDAVpHZIOgSGSEZHqEAGUEaklEAIMBoQFaSkcAZIVkI4QAZCNlS4MDWkxHAGSGZCWEAGQl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cmVjdGx5IGluIFB5dGhvbi4KCkhlcmUgaXMgYSBwcm9ncmFtIHRvIHBhcnNlICJIZWxsbywgV29ybGQhIiAob3IgYW55IGdyZWV0aW5nIG9mIHRoZSBmb3JtIApDeyI8c2FsdXRhdGlvbj4sIDxhZGRyZXNzZWU+ISJ9KSwgYnVpbHQgdXAgdXNpbmcgTHtXb3JkfSwgTHtMaXRlcmFsfSwgYW5kIEx7QW5kfSBlbGVtZW50cyAKKEx7JysnPFBhcnNlckVsZW1lbnQuX19hZGRfXz59IG9wZXJhdG9yIGdpdmVzIEx7QW5kfSBleHByZXNzaW9ucywgc3RyaW5ncyBhcmUgYXV0by1jb252ZXJ0ZWQgdG8KTHtMaXRlcmFsfSBleHByZXNzaW9ucyk6OgoKICAgIGZyb20gcHlwYXJzaW5nIGltcG9ydCBXb3JkLCBhbHBoYXMKCiAgICAjIGRlZmluZSBncmFtbWFyIG9mIGEgZ3JlZXRpbmcKICAgIGdyZWV0ID0gV29yZChhbHBoYXMpICsgIiwiICsgV29yZChhbHBoYXMpICsgIiEiCgogICAgaGVsbG8gPSAiSGVsbG8sIFdvcmxkISIKICAgIHByaW50IChoZWxsbywgIi0+IiwgZ3JlZXQucGFyc2VTdHJpbmcoaGVsbG8pKQoKVGhlIHByb2dyYW0gb3V0cHV0cyB0aGUgZm9sbG93aW5nOjoKCiAgICBIZWxsbywgV29ybGQhIC0+IFsnSGVsbG8nLCAnLCcsICdXb3JsZCcsICchJ10KClRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYW1tYXIgaXMgcXVpdGUgcmVhZGFibGUsIG93aW5nIHRvIHRoZSBzZWxmLWV4cGxhbmF0b3J5CmNsYXNzIG5hbWVzLCBhbmQgdGhlIHVzZSBvZiAnKycsICd8JyBhbmQgJ14nIG9wZXJhdG9ycy4KClRoZSBMe1BhcnNlUmVzdWx0c30gb2JqZWN0IHJldHVybmVkIGZyb20gTHtQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmc+fSBjYW4gYmUgYWNjZXNzZWQgYXMgYSBuZXN0ZWQgbGlzdCwgYSBkaWN0aW9uYXJ5LCBvciBhbgpvYmplY3Qgd2l0aCBuYW1lZCBhdHRyaWJ1dGVzLgoKVGhlIHB5cGFyc2luZyBtb2R1bGUgaGFuZGxlcyBzb21lIG9mIHRoZSBwcm9ibGVtcyB0aGF0IGFyZSB0eXBpY2FsbHkgdmV4aW5nIHdoZW4gd3JpdGluZyB0ZXh0IHBhcnNlcnM6CiAtIGV4dHJhIG9yIG1pc3Npbmcgd2hpdGVzcGFjZSAodGhlIGFib3ZlIHByb2dyYW0gd2lsbCBhbHNvIGhhbmRsZSAiSGVsbG8sV29ybGQhIiwgIkhlbGxvICAsICBXb3JsZCAgISIsIGV0Yy4pCiAtIHF1b3RlZCBzdHJpbmdzCiAtIGVtYmVkZGVkIGNvbW1lbnRzCgoKR2V0dGluZyBTdGFydGVkIC0KLS0tLS0tLS0tLS0tLS0tLS0KVmlzaXQgdGhlIGNsYXNzZXMgTHtQYXJzZXJFbGVtZW50fSBhbmQgTHtQYXJzZVJlc3VsdHN9IHRvIHNlZSB0aGUgYmFzZSBjbGFzc2VzIHRoYXQgbW9zdCBvdGhlciBweXBhcnNpbmcKY2xhc3NlcyBpbmhlcml0IGZyb20uIFVzZSB0aGUgZG9jc3RyaW5ncyBmb3IgZXhhbXBsZXMgb2YgaG93IHRvOgogLSBjb25zdHJ1Y3QgbGl0ZXJhbCBtYXRjaCBleHByZXNzaW9ucyBmcm9tIEx7TGl0ZXJhbH0gYW5kIEx7Q2FzZWxlc3NMaXRlcmFsfSBjbGFzc2VzCiAtIGNvbnN0cnVjdCBjaGFyYWN0ZXIgd29yZC1ncm91cCBleHByZXNzaW9ucyB1c2luZyB0aGUgTHtXb3JkfSBjbGFzcwogLSBzZWUgaG93IHRvIGNyZWF0ZSByZXBldGl0aXZlIGV4cHJlc3Npb25zIHVzaW5nIEx7WmVyb09yTW9yZX0gYW5kIEx7T25lT3JNb3JlfSBjbGFzc2VzCiAtIHVzZSBMeycrJzxBbmQ+fSwgTHsnfCc8TWF0Y2hGaXJzdD59LCBMeydeJzxPcj59LCBhbmQgTHsnJic8RWFjaD59IG9wZXJhdG9ycyB0byBjb21iaW5lIHNpbXBsZSBleHByZXNzaW9ucyBpbnRvIG1vcmUgY29tcGxleCBvbmVzCiAtIGFzc29jaWF0ZSBuYW1lcyB3aXRoIHlvdXIgcGFyc2VkIHJlc3VsdHMgdXNpbmcgTHtQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lfQogLSBmaW5kIHNvbWUgaGVscGZ1bCBleHByZXNzaW9uIHNob3J0LWN1dHMgbGlrZSBMe2RlbGltaXRlZExpc3R9IGFuZCBMe29uZU9mfQogLSBmaW5kIG1vcmUgdXNlZnVsIGNvbW1vbiBleHByZXNzaW9ucyBpbiB0aGUgTHtweXBhcnNpbmdfY29tbW9ufSBuYW1lc3BhY2UgY2xhc3MKegUyLjIuMXoVMTggU2VwIDIwMTggMDA6NDkgVVRDeipQYXVsIE1jR3VpcmUgPHB0bWNnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD7pAAAAAE4pAdoDcmVmKQHaCGRhdGV0aW1lKQHaBVJMb2NrKQHaCEl0ZXJhYmxlKQHaDk11dGFibGVNYXBwaW5nKQHaC09yZGVyZWREaWN02gNBbmTaD0Nhc2VsZXNzS2V5d29yZNoPQ2FzZWxlc3NMaXRlcmFs2gpDaGFyc05vdElu2gdDb21iaW5l2gREaWN02gRFYWNo2gVFbXB0edoKRm9sbG93ZWRCedoHRm9yd2FyZNoKR29Ub0NvbHVtbtoFR3JvdXDaB0tleXdvcmTaB0xpbmVFbmTaCUxpbmVTdGFydNoHTGl0ZXJhbNoKTWF0Y2hGaXJzdNoHTm9NYXRjaNoGTm90QW552glPbmVPck1vcmXaCE9ubHlPbmNl2ghPcHRpb25hbNoCT3LaElBhcnNlQmFzZUV4Y2VwdGlvbtoTUGFyc2VFbGVtZW50RW5oYW5jZdoOUGFyc2VFeGNlcHRpb27aD1BhcnNlRXhwcmVzc2lvbtoTUGFyc2VGYXRhbEV4Y2VwdGlvbtoMUGFyc2VSZXN1bHRz2hRQYXJzZVN5bnRheEV4Y2VwdGlvbtoNUGFyc2VyRWxlbWVudNoMUXVvdGVkU3RyaW5n2hlSZWN1cnNpdmVHcmFtbWFyRXhjZXB0aW9u2gVSZWdleNoGU2tpcFRv2glTdHJpbmdFbmTaC1N0cmluZ1N0YXJ02ghTdXBwcmVzc9oFVG9rZW7aDlRva2VuQ29udmVydGVy2gVXaGl0ZdoEV29yZNoHV29yZEVuZNoJV29yZFN0YXJ02gpaZXJvT3JNb3Jl2glhbHBoYW51bXPaBmFscGhhc9oKYWxwaGFzOGJpdNoLYW55Q2xvc2VUYWfaCmFueU9wZW5UYWfaDWNTdHlsZUNvbW1lbnTaA2NvbNoSY29tbWFTZXBhcmF0ZWRMaXN02hBjb21tb25IVE1MRW50aXR52gxjb3VudGVkQXJyYXnaD2NwcFN0eWxlQ29tbWVudNoPZGJsUXVvdGVkU3RyaW5n2g9kYmxTbGFzaENvbW1lbnTaDWRlbGltaXRlZExpc3TaBmRpY3RPZtoOZG93bmNhc2VUb2tlbnPaBWVtcHR52gdoZXhudW1z2gtodG1sQ29tbWVudNoQamF2YVN0eWxlQ29tbWVudNoEbGluZdoHbGluZUVuZNoJbGluZVN0YXJ02gZsaW5lbm/aDG1ha2VIVE1MVGFnc9oLbWFrZVhNTFRhZ3PaDm1hdGNoT25seUF0Q29s2hFtYXRjaFByZXZpb3VzRXhwctoUbWF0Y2hQcmV2aW91c0xpdGVyYWzaCm5lc3RlZEV4cHLaD251bGxEZWJ1Z0FjdGlvbtoEbnVtc9oFb25lT2baB29wQXNzb2PaEm9wZXJhdG9yUHJlY2VkZW5jZdoKcHJpbnRhYmxlc9oIcHVuYzhiaXTaEnB5dGhvblN0eWxlQ29tbWVudNoMcXVvdGVkU3RyaW5n2gxyZW1vdmVRdW90ZXPaEXJlcGxhY2VIVE1MRW50aXR52gtyZXBsYWNlV2l0aNoKcmVzdE9mTGluZdoPc2dsUXVvdGVkU3RyaW5n2gZzcmFuZ2XaCXN0cmluZ0VuZNoLc3RyaW5nU3RhcnTaEHRyYWNlUGFyc2VBY3Rpb27aDXVuaWNvZGVTdHJpbmfaDHVwY2FzZVRva2Vuc9oNd2l0aEF0dHJpYnV0ZdoNaW5kZW50ZWRCbG9ja9oPb3JpZ2luYWxUZXh0Rm9y2gd1bmdyb3Vw2g1pbmZpeE5vdGF0aW9u2gtsb2NhdGVkRXhwctoJd2l0aENsYXNz2gpDbG9zZU1hdGNo2gh0b2tlbk1hcNoQcHlwYXJzaW5nX2NvbW1vbukDAAAAYwEAAAAAAAAAAAAAAAMAAAAIAAAAQwAAAHNmAAAAdAB8AHQBgwJyDnwAUwB6CnQCfACDAVcAUwAEAHQDawpyYAEAAQABAHQBfACDAaAEdAWgBqEAZAGhAn0BdAdkAoMBfQJ8AqAIZANkBIQA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RXhhbXBsZTo6CiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBkYXRlX3N0ciA9IChpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJ5ZWFyIikgKyAnLycgCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgibW9udGgiKSArICcvJyAKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJkYXkiKSkKICAgICAgICAjIGVxdWl2YWxlbnQgZm9ybToKICAgICAgICAjIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCgogICAgICAgICMgcGFyc2VTdHJpbmcgcmV0dXJucyBhIFBhcnNlUmVzdWx0cyBvYmplY3QKICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpCgogICAgICAgIGRlZiB0ZXN0KHMsIGZuPXJlcHIpOgogICAgICAgICAgICBwcmludCgiJXMgLT4gJXMiICUgKHMsIGZuKGV2YWwocykpKSkKICAgICAgICB0ZXN0KCJsaXN0KHJlc3VsdCkiKQogICAgICAgIHRlc3QoInJlc3VsdFswXSIpCiAgICAgICAgdGVzdCgicmVzdWx0Wydtb250aCddIikKICAgICAgICB0ZXN0KCJyZXN1bHQuZGF5IikKICAgICAgICB0ZXN0KCInbW9udGgnIGluIHJlc3VsdCIpCiAgICAgICAgdGVzdCgiJ21pbnV0ZXMnIGluIHJlc3VsdCIpCiAgICAgICAgdGVzdCgicmVzdWx0LmR1bXAoKSIsIHN0cikKICAgIHByaW50czo6CiAgICAgICAgbGlzdChyZXN1bHQpIC0+IFsnMTk5OScsICcvJywgJzEyJywgJy8nLCAnMzEnXQogICAgICAgIHJlc3VsdFswXSAtPiAnMTk5OScKICAgICAgICByZXN1bHRbJ21vbnRoJ10gLT4gJzEyJwogICAgICAgIHJlc3VsdC5kYXkgLT4gJzMxJwogICAgICAgICdt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ICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBkZWYgcmVtb3ZlX2ZpcnN0KHRva2Vucyk6CiAgICAgICAgICAgICAgICB0b2tlbnMucG9wKDApCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShXb3JkKG51bXMpKS5wYXJzZVN0cmluZygiMCAxMjMgMzIxIikpICMgLT4gWycwJywgJzEyMycsICczMjEnXQogICAgICAgICAgICBwcmludChPbmVPck1vcmUoV29yZChudW1zKSkuYWRkUGFyc2VBY3Rpb24ocmVtb3ZlX2ZpcnN0KS5wYXJzZVN0cmluZygiMCAxMjMgMzIxIikpICMgLT4gWycxMjMnLCAnMzIxJ10KCiAgICAgICAgICAgIGxhYmVsID0gV29yZChhbHBoYXMpCiAgICAgICAgICAgIHBhdHQgPSBsYWJlbCgiTEFCRUwiKSArIE9uZU9yTW9yZShXb3JkKG51bXMpKQogICAgICAgICAgICBwcmludChwYXR0LnBhcnNlU3RyaW5nKCJBQUIgMTIzIDMyMSIpLmR1bXAoKSkKCiAgICAgICAgICAgICMgVXNlIHBvcCgpIGluIGEgcGFyc2UgYWN0aW9uIHRvIHJlbW92ZSBuYW1lZCByZXN1bHQgKG5vdGUgdGhhdCBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIG5vdAogICAgICAgICAgICAjIHJlbW92ZWQgZnJvbSBsaXN0IGZvcm0gb2YgcmVzdWx0cykKICAgICAgICAgICAgZGVmIHJlbW92ZV9MQUJFTCh0b2tlbnMpOgogICAgICAgICAgICAgICAgdG9rZW5zLnBvcCgiTEFCRUwiKQogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VucwogICAgICAgICAgICBwYXR0LmFkZFBhcnNlQWN0aW9uKHJlbW92ZV9MQUJFTCkKICAgICAgICAgICAgcHJpbnQocGF0dC5wYXJzZVN0cmluZygiQUFCIDEyMyAzMjEiKS5kdW1wKCkpCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgWydBQUInLCAnMTIzJywgJzMyMSddCiAgICAgICAgICAgIC0gTEFCRUw6IEFBQgoKICAgICAgICAgICAgWydBQUInLCAn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ctsAAAApAnKKAAAA2gNyZXNyeQAAAHJ5AAAAcnoAAABy8AAAAM4CAABzBAAAAAYAAgB6J1BhcnNlUmVzdWx0cy5hc0xpc3QuPGxvY2Fscz4uPGxpc3Rjb21wPnIHAQAAcrUAAAByeQAAAHJ5AAAAcnoAAABy2wAAAMACAABzAgAAAAAOehNQYXJzZVJlc3VsdHMuYXNMaXN0YwEAAAAAAAAAAAAAAAIAAAAEAAAAAwAAAHM2AAAAdAByDHwAagF9AW4GfABqAn0BhwBmAWQBZAKECIkAdAOHAGYBZANkBIQIfAGDAEQAgwGDAVMAKQVhwwMAAAogICAgICAgIFJldHVybnMgdGhlIG5hbWVkIHBhcnNlIHJlc3VsdHMgYXMgYSBuZXN0ZWQgZGljdGlvbmFyeS4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCiAgICAgICAgICAgIAogICAgICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygnMTIvMzEvMTk5OScpCiAgICAgICAgICAgIHByaW50KHR5cGUocmVzdWx0KSwgcmVwcihyZXN1bHQpKSAjIC0+IDxjbGFzcyAncHlwYXJzaW5nLlBhcnNlUmVzdWx0cyc+IChbJzEyJywgJy8nLCAnMzEnLCAnLycsICcxOTk5J10sIHsnZGF5JzogWygnMTk5OScsIDQpXSwgJ3llYXInOiBbKCcxMicsIDApXSwgJ21vbnRoJzogWygnMzEnLCAyKV19KQogICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0X2RpY3QgPSByZXN1bHQuYXNEaWN0KCkKICAgICAgICAgICAgcHJpbnQodHlwZShyZXN1bHRfZGljdCksIHJlcHIocmVzdWx0X2RpY3QpKSAjIC0+IDxjbGFzcyAnZGljdCc+IHsnZGF5JzogJzE5OTknLCAneWVhcic6ICcxMicsICdtb250aCc6ICczMSd9CgogICAgICAgICAgICAjIGV2ZW4gdGhv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IG1pZ2h0IG1hdGNoIGF0IGEgcGFydGljdWxhciBsb2NhdGlvbi4KCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIHNzbl9leHByID0gUmVnZXgociJcZFxkXGQtXGRcZC1cZFxkXGRcZCIpCiAgICAgICAgICAgIGhvdXNlX251bWJlcl9leHByID0gU3VwcHJlc3MoJyMnKSArIFdvcmQobnVtcywgYWxwaGFudW1zKQogICAgICAgICAgICB1c2VyX2RhdGEgPSAoR3JvdXAoaG91c2VfbnVtYmVyX2V4cHIpKCJob3VzZV9udW1iZXIiKSAKICAgICAgICAgICAgICAgICAgICAgICAgfCBHcm91cChzc25fZXhwcikoInNzbiIpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgR3JvdXAoaW50ZWdlcikoImFnZSIpKQogICAgICAgICAgICB1c2VyX2luZm8gPSBPbmVPck1vcmUodXNlcl9kYXRhKQogICAgICAgICAgICAKICAgICAgICAgICAgcmVzdWx0ID0gdXNlcl9pbmZvLnBhcnNlU3RyaW5nKCIyMiAxMTEtMjItMzMzMyAjMjIxQiIpCiAgICAgICAgICAgIGZvciBpdGVtIGluIHJlc3VsdDoKICAgICAgICAgICAgICAgIHByaW50KGl0ZW0uZ2V0TmFtZSgpLCAnOicsIGl0ZW1bMF0pCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgYWdlIDogMjIKICAgICAgICAgICAgc3NuIDogMTExLTIyLTMzMzMKICAgICAgICAgICAgaG91c2VfbnVtYmVyIDogMjIxQgogICAgICAgIE5yjQAAAHIBAAAAKQJyAQAAAHJ0AAAAKQly3gAAAHLfAAAA2hVfUGFyc2VSZXN1bHRzX19sb29rdXBy+AAAAHLnAAAA2gRuZXh0cgoBAAByFwEAAHIVAQAAKQJyqwAAANoDcGFycnkAAAByeQAAAHJ6AAAA2gdnZXROYW1lQgMAAHMcAAAAABYGAQYBBgEIAQQBCgIGAQwBDP8CAhz+AgMSAnoUUGFyc2VSZXN1bHRzLmdldE5hbWVyAQAAAGMEAAAAAAAAAAAAAAAL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bnR9KQoKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgICAgICBudW0gPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGZ1bmMgPSBGb3J3YXJkKCkKICAgICAgICAgICAgdGVybSA9IGlkZW50IHwgbnVtIHwgR3JvdXAoJygnICsgZnVuYyArICcpJykKICAgICAgICAgICAgZnVuYyA8PD0gaWRlbnQgKyBHcm91cChPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHRlcm0pKSkKICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5wYXJzZVN0cmluZygiZm5hIGEsYiwoZm5iIGMsZCwyMDApLDEwMCIpCiAgICAgICAgICAgIHJlc3VsdC5wcHJpbnQod2lkdGg9NDApCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAgICAgWydmbmEnLAogICAgICAgICAgICAgWydhJywKICAgICAgICAgICAgICAnYicsCiAgICAgICAgICAgICAgWycoJywgJ2ZuYicsIFsnYycsICdkJywgJzIwMCddLCAnKSddLAogICAgICAgICAgICAgICcxMDAnXV0KICAgICAgICBOKQLaBnBwcmludHLbAAAAqQNyqwAAAHKqAAAAchwBAAByeQAAAHJ5AAAAcnoAAAByZgEAAJQDAABzAgAAAAAVehNQYXJzZVJlc3VsdHMucHByaW50YwEAAAAAAAAAAAAAAAEAAAAFAAAAQwAAAHMuAAAAfABqAHwAagGgAqEAfABqA2QAawlyHnwAoAOhAHAgZAB8AGoEfABqBWYEZgJTAHKJAAAAKQZy5AAAAHLnAAAAcukAAABy3wAAAHLgAAAAct4AAABytQAAAHJ5AAAAcnkAAAByegAAANoMX19nZXRzdGF0ZV9frAMAAHMOAAAAAAEEAQgBFAEEAQT9Av96GVBhcnNlUmVzdWx0cy5fX2dldHN0YXRlX19jAgAAAAAAAAAAAAAABAAAAAUAAABDAAAAc04AAAB8AWQBGQB8AF8AfAFkAhkAXAR8AF8BfQJ9A3wAXwJpAHwAXwN8AGoDoAR8A6EBAQB8AmQAawlyRHQFfAKDAXwAXwZuBmQAfABfBmQAUwBy9wAAACkHcuQAAABy5wAAAHLeAAAAcuAAAAByMwEAAHLzAAAAct8AAAApBHKrAAAA2gVzdGF0ZXJdAQAA2gxpbkFjY3VtTmFtZXNyeQAAAHJ5AAAAcnoAAADaDF9fc2V0c3RhdGVfX7MDAABzFgAAAAABCgQG/QYBAgECAQQBBgEMAQgBDAJ6GVBhcnNlUmVzdWx0cy5fX3NldHN0YXRlX19jAQAAAAAAAAAAAAAAAQAAAAQAAABDAAAAcxQAAAB8AGoAfABqAXwAagJ8AGoDZgRTAHKJAAAAKQRy5AAAAHLeAAAAcuEAAABy4gAAAHK1AAAAcnkAAAByeQAAAHJ6AAAA2g5fX2dldG5ld2FyZ3NfX8ADAABzAgAAAAABehtQYXJzZVJlc3VsdHMuX19nZXRuZXdhcmdzX19jAQAAAAAAAAAAAAAAAQAAAAQAAABDAAAAcxgAAAB0AHQBfACDAYMBdAJ8AKADoQCDARcAUwByiQAAACkEcsAAAABywQAAAHLjAAAAchUBAABytQAAAHJ5AAAAcnkAAAByegAAAHLCAAAAwwMAAHMCAAAAAAF6FFBhcnNlUmVzdWx0cy5fX2Rpcl9fKQROTlRUKQFOKQFyoAAAACkETkZyoAAAAFQpA3KgAAAAcgEAAABUKTRymwAAAHKcAAAAcp0AAABywwAAAHLXAAAAcn0AAAByrQAAAHLRAAAAcvYAAAByBAEAAHIFAQAAcgYBAAByCAEAANoLX19ub256ZXJvX19yCwEAAHINAQAAchABAAByEwEAAHIUAQAAckUBAAByFQEAAHIXAQAAcvwAAAByDgEAAHIWAQAAchgBAAByGgEAAHIfAQAAcvIAAAByIgEAAHIkAQAAciYBAAByKAEAAHK0AAAAciwBAAByNgEAAHI4AQAAcrgAAABytgAAAHI9AQAActsAAAByQwEAAHLpAAAAck8BAAByWwEAAHJeAQAAcmEBAAByZgEAAHJoAQAAcmsBAABybAEAAHLCAAAAcnkAAAByeQAAAHJ5AAAAcnoAAAByJAAAAEQBAABzaAAAAAgBBCYKCRQnCAkMDQgVCAMIAQgBBAEIAQgBCAYIAwgDBAEEAwQDBAECAwQDBAMEAwgECAQIBAgFCDQKFggUCA4IEggHCA4IBQgQCAgIAwgDCgsIEAgjCAsKPQgHCCUKLQgYCAcIDQgDYwIAAAAAAAAAAAAAAAMAAAAGAAAAQwAAAHNGAAAAfAF9AmQBfAAEAAMAawByHHQAfAKDAWsAcjRuBAEAbhR8AnwAZAIYABkAZANrAnI0ZAJTAHwAfAKgAWQDZAF8AKEDGABTACkEYQQCAABSZXR1cm5zIGN1cnJlbnQgY29sdW1uIHdpdGhpbiBhIHN0cmluZywgY291bnRpbmcgbmV3bGluZXMgYXMgbGluZSBzZXBhcmF0b3JzLgogICBUaGUgZmlyc3QgY29sdW1uIGlzIG51bWJlciAxLgoKICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBiZWhhdmlvciBpcyB0byBleHBhbmQgdGFicyBpbiB0aGUgaW5wdXQgc3RyaW5nCiAgIGJlZm9yZSBzdGFydGluZyB0aGUgcGFyc2luZyBwcm9jZXNzLiAgU2VlIEx7SXtQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nfTxQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nPn0gZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgb24gcGFyc2luZyBzdHJpbmdzIGNvbnRhaW5pbmcgQ3s8VEFCPn1zLCBhbmQgc3VnZ2VzdGVkIG1ldGhvZHMgdG8gbWFpbnRhaW4gYQogICBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHBhcnNlZCBzdHJpbmcsIHRoZSBwYXJzZSBsb2NhdGlvbiwgYW5kIGxpbmUgYW5kIGNvbHVtbgogICBwb3NpdGlvbnMgd2l0aGluIHRoZSBwYXJzZWQgc3RyaW5nLgogICByAQAAAHKNAAAAckgBAAApAnL4AAAA2gVyZmluZCkDcqYAAADaBHN0cmdykAAAAHJ5AAAAcnkAAAByegAAAHI7AAAAyAMAAHMEAAAAAAoEAWMCAAAAAAAAAAAAAAACAAAABQAAAEMAAABzEgAAAHwBoABkAWQCfAChA2QDFwBTACkEYQcCAABSZXR1cm5zIGN1cnJlbnQgbGluZSBudW1iZXIgd2l0aGluIGEgc3RyaW5nLCBjb3VudGluZyBuZXdsaW5lcyBhcyBsaW5lIHNlcGFyYXRvcnMuCiAgIFRoZSBmaXJzdCBsaW5lIGlzIG51bWJlciAxLgoKICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2lu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KQVOVEZyoAAAACkDTk5OKRdy4wAAANoLcGFyc2VBY3Rpb27aCmZhaWxBY3Rpb27aB3N0clJlcHLaC3Jlc3VsdHNOYW1l2gpzYXZlQXNMaXN02g5za2lwV2hpdGVzcGFjZXImAAAAcpwBAADaCndoaXRlQ2hhcnPaFWNvcHlEZWZhdWx0V2hpdGVDaGFyc9oObWF5UmV0dXJuRW1wdHnaCGtlZXBUYWJz2gtpZ25vcmVFeHByc9oFZGVidWfaC3N0cmVhbWxpbmVk2g1tYXlJbmRleEVycm9y2gZlcnJtc2faDG1vZGFsUmVzdWx0c9oMZGVidWdBY3Rpb25z2gJyZdoMY2FsbFByZXBhcnNl2g1jYWxsRHVyaW5nVHJ5KQJyqwAAANoIc2F2ZWxpc3RyeQAAAHJ5AAAAcnoAAAByrQAAAHgEAABzKAAAAAABCAEGAgYBBgEGAQYBCAEGAQYBBgEIAQYBBgEGAQYBBgEGAQYBBgF6FlBhcnNlckVsZW1lbnQuX19pbml0X19jAQAAAAAAAAAAAAAAAgAAAAMAAABDAAAAczwAAAB0AKAAfAChAX0BfABqAWQBZAGFAhkAfAFfAXwAagJkAWQBhQIZAHwBXwJ8AGoDcjh0BGoFfAFfBnwBUwApAmEkAwAACiAgICAgICAgTWFrZSBhIGNvcHkgb2YgdGhpcyBDe1BhcnNlckVsZW1lbnR9LiAgVXNlZnVsIGZvciBkZWZpbmluZyBkaWZmZXJlbnQgcGFyc2UgYWN0aW9ucwogICAgICAgIGZvciB0aGUgc2FtZSBwYXJzaW5nIHBhdHRlcm4sIHVzaW5nIGNvcGllcyBvZiB0aGUgb3JpZ2luYWwgcGFyc2UgZWxlbWVudC4KICAgICAgICAKICAgICAgICBFeGFtcGxlOjoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IGludCh0b2tzWzBdKSkKICAgICAgICAgICAgaW50ZWdlcksgPSBpbnRlZ2VyLmNvcHkoKS5hZGRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogdG9rc1swXSoxMDI0KSArIFN1cHByZXNzKCJLIikKICAgICAgICAgICAgaW50ZWdlck0gPSBpbnRlZ2VyLmNvcHko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YWxsRHVyaW5nVHJ5ID0gKGRlZmF1bHQ9Q3tGYWxzZX0pIGluZGljYXRlIGlmIHBhcnNlIGFjdGlvbiBzaG91bGQgYmUgcnVuIGR1cmluZyBsb29rYWhlYWRzIGFuZCBhbHRlcm5hdGUgdGVzdGluZwoKICAgICAgICBOb3RlOiB0aGUgZGVmYXVsdCBwYXJzaW5nIGJlaGF2aW9yIGlzIHRvIGV4cGFuZCB0YWJzIGluIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICBiZWZvcmUgc3RhcnRpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIFNlZSBMe0l7cGFyc2VTdHJpbmd9PHBhcnNlU3RyaW5nPn0gZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgICAgICBvbiBwYXJzaW5nIHN0cmluZ3MgY29udGFpbmluZyBDezxUQUI+fXMsIGFuZCBzdWdnZXN0ZWQgbWV0aG9kcyB0byBtYWludGFpbiBhCiAgICAgICAgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBwYXJzZWQgc3RyaW5nLCB0aGUgcGFyc2UgbG9jYXRpb24sIGFuZCBsaW5lIGFuZCBjb2x1bW4KICAgICAgICBwb3NpdGlvbnMgd2l0aGluIHRoZSBwYXJzZWQgc3RyaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIgKyAnLycgKyBpbnRlZ2VyICsgJy8nICsgaW50ZWdlcgoKICAgICAgICAgICAgZGF0ZV9zdHIucGFyc2VTdHJpbmcoIjE5OTkvMTIvMzEiKSAgIyAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KCiAgICAgICAgICAgICMgdXNlIHBhcnNlIGFjdGlvbiB0byBjb252ZXJ0IHRvIGludHMgYXQgcGFyc2UgdGltZQogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKS5zZXRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogaW50KHRva3NbMF0pKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIgKyAnLycgKyBpbnRlZ2VyICsgJy8nICsgaW50ZWdlcgoKICAgICAgICAgICAgIyBub3RlIHRoYXQgaW50ZWdlciBmaWVsZHMgYXJlIG5vdyBpbnRzLCBub3Qgc3RyaW5ncwogICAgICAgICAgICBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpICAjIC0+IFsxOTk5LCAnLycsIDEyLCAnLycsIDMxXQogICAgICAgIHK1AQAARikGcuMAAADaA21hcHKbAQAAcqIBAABy8gAAAHK1AQAAqQNyqwAAANoDZm5zchwBAAByeQAAAHJ5AAAAcnoAAAByhAAAAOIEAABzBgAAAAAiFAEOAXocUGFyc2VyRWxlbWVudC5zZXRQYXJzZUFjdGlvbmMBAAAAAAAAAAAAAAADAAAABwAAAE8AAABzNAAAAHwABABqAHQBdAJ0A3QBfAGDAYMCgwE3AAIAXwB8AGoEcCx8AqAFZAFkAqECfABfBHwAUwApA3qzCiAgICAgICAgQWRkIG9uZSBvciBtb3JlIHBhcnNlIGFjdGlvbnMgdG8gZXhwcmVzc2lvbidzIGxpc3Qgb2YgcGFyc2UgYWN0aW9ucy4gU2VlIEx7SXtzZXRQYXJzZUFjdGlvbn08c2V0UGFyc2VBY3Rpb24+fS4KICAgICAgICAKICAgICAgICBTZWUgZXhhbXBsZXMgaW4gTHtJe2NvcHl9PGNvcHk+fS4KICAgICAgICBytQEAAEYpBnKiAQAAcuMAAAByywEAAHKbAQAAcrUBAABy8gAAAHLMAQAAcnkAAAByeQAAAHJ6AAAA2g5hZGRQYXJzZUFjdGlvbggFAABzBgAAAAAGHAEUAXocUGFyc2VyRWxlbWVudC5hZGRQYXJzZUFjdGlvbmMBAAAAAAAAAAAAAAAEAAAABAAAAA8AAABzXgAAAHwCoABkAWQCoQKJAnwCoABkA2QEoQJyHHQBbgJ0AokAfAFEAF0giQGHAIcBhwJmA2QFZAaECH0DfABqA6AEfAOhAQEAcSR8AGoFcFZ8AqAAZAdkBKECfABfBXwAUwApCGHTAwAAQWRkIGEgYm9vbGVhbiBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gZXhwcmVzc2lvbidzIGxpc3Qgb2YgcGFyc2UgYWN0aW9ucy4gU2VlIAogICAgICAgIEx7SXtzZXRQYXJzZUFjdGlvbn08c2V0UGFyc2VBY3Rpb24+fSBmb3IgZnVuY3Rpb24gY2FsbCBzaWduYXR1cmVzLiBVbmxpa2UgQ3tzZXRQYXJzZUFjdGlvbn0sIAogICAgICAgIGZ1bmN0aW9ucyBwYXNzZWQgdG8gQ3thZGRDb25kaXRpb259IG5lZWQgdG8gcmV0dXJuIGJvb2xlYW4gc3VjY2Vzcy9mYWlsIG9mIHRoZSBjb25kaXRpb24uCgogICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzOgogICAgICAgICAtIG1lc3NhZ2UgPSBkZWZpbmUgYSBjdXN0b20gbWVzc2FnZSB0byBiZSB1c2VkIGluIHRoZSByYWlzZWQgZXhjZXB0aW9uCiAgICAgICAgIC0gZmF0YWwgICA9IGlmIFRydWUsIHdpbGwgcmFpc2UgUGFyc2VGYXRhbEV4Y2VwdGlvbiB0byBzdG9wIHBhcnNpbmcgaW1tZWRpYXRlbHk7IG90aGVyd2lzZSB3aWxsIHJhaXNlIFBhcnNlRXhjZXB0aW9uCiAgICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKS5zZXRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogaW50KHRva3NbMF0pKQogICAgICAgICAgICB5ZWFyX2ludCA9IGludGVnZXIuY29weSgpCiAgICAgICAgICAgIHllYXJfaW50LmFkZENvbmRpdGlvbihsYW1iZGEgdG9rczogdG9rc1swXSA+PSAyMDAwLCBtZXNzYWdlPSJPbmx5IHN1cHBvcnQgeWVhcnMgMjAwMCBhbmQgbGF0ZXIiKQogICAgICAgICAgICBkYXRlX3N0ciA9IHllYXJfaW50ICsgJy8nICsgaW50ZWdlciArICcvJyArIGludGVnZXIKCiAgICAgICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikgICMgLT4gRXhjZXB0aW9uOiBPbmx5IHN1cHBvcnQgeWVhcnMgMjAwMCBhbmQgbGF0ZXIgKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQogICAgICAgINoHbWVzc2FnZXod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bWVudC5yZXNldENhY2hl6YAAAABjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAczgAAAB0AGoBczRkAXQAXwF8AGQCawhyIHQAoAKhAHQAXwNuDHQAoAR8AKEBdABfA3QAagV0AF8GZAJTACkDYZYFAABFbmFibGVzICJwYWNrcmF0IiBwYXJzaW5nLCB3aGljaCBhZGRzIG1lbW9pemluZyB0byB0aGUgcGFyc2luZyBsb2dpYy4KICAgICAgICAgICBSZXBlYXRlZCBwYXJzZSBhdHRlbXB0cyBhdCB0aGUgc2FtZSBzdHJpbmcgbG9jYXRpb24gKHdoaWNoIGhhcHBlbnMKICAgICAgICAgICBvZnRlbiBpbiBtYW55IGNvbXBsZXggZ3JhbW1hcnMpIGNhbiBpbW1lZGlhdGVseSByZXR1cm4gYSBjYWNoZWQgdmFsdWUsCiAgICAgICAgICAgaW5zdGVhZCBvZiByZS1leGVjdXRpbmcgcGFyc2luZy92YWxpZGF0aW5nIGNvZGUuICBNZW1vaXppbmcgaXMgZG9uZSBvZgogICAgICAgICAgIGJvdGggdmFsaWQgcmVzdWx0cyBhbmQgcGFyc2luZyBleGNlcHRpb25zLgogICAgICAgICAgIAogICAgICAgICAgIFBhcmFtZXRlcnM6CiAgICAgICAgICAgIC0gY2FjaGVfc2l6ZV9saW1pdCAtIChkZWZhdWx0PUN7MTI4fSkgLSBpZiBhbiBpbnRlZ2VyIHZhbHVlIGlzIHByb3ZpZGVkCiAgICAgICAgICAgICAgd2lsbCBsaW1pdCB0aGUgc2l6ZSBvZiB0aGUgcGFja3JhdCBjYWNoZTsgaWYgTm9uZSBpcyBwYXNzZWQsIHRoZW4KICAgICAgICAgICAgICB0aGUgY2FjaGUgc2l6ZSB3aWxsIGJlIHVuYm91bmRlZDsgaWYgMCBpcyBwYXNzZWQsIHRoZSBjYWNoZSB3aWxsCiAgICAgICAgICAgICAgYmUgZWZmZWN0aXZlbHkgZGlzYWJsZWQuCiAgICAgICAgICAgIAogICAgICAgICAgIFRoaXMgc3BlZWR1cCBtYXkgYnJlYWsgZXhpc3RpbmcgcHJvZ3JhbXMgdGhhdCB1c2UgcGFyc2UgYWN0aW9ucyB0aGF0CiAgICAgICAgICAgaGF2ZSBzaWRlLWVmZmVjdHMuICBGb3IgdGhpcyByZWFzb24sIHBhY2tyYXQgcGFyc2luZyBpcyBkaXNhYmxlZCB3aGVuCiAgICAgICAgICAgeW91IGZpcnN0IGltcG9ydCBweXBhcnNpbmcuICBUbyBhY3RpdmF0ZSB0aGUgcGFja3JhdCBmZWF0dXJlLCB5b3VyCiAgICAgICAgICAgcHJvZ3JhbSBtdXN0IGNhbGwgdGhlIGNsYXNzIG1ldGhvZCBDe1BhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdCgpfS4gIElmCiAgICAgICAgICAgeW91ciBwcm9ncmFtIHVzZXMgQ3twc3ljb30gdG8gImNvbXBpbGUgYXMgeW91IGdvIiwgeW91IG11c3QgY2FsbAogICAgICAgICAgIEN7ZW5hYmxlUGFja3JhdH0gYmVmb3JlIGNhbGxpbmcgQ3twc3ljby5mdWxsKCl9LiAgSWYgeW91IGRvIG5vdCBkbyB0aGlzLAogICAgICAgICAgIFB5dGhvbiB3aWxsIGNyYXNoLiAgRm9yIGJlc3QgcmVzdWx0cywgY2FsbCBDe2VuYWJsZVBhY2tyYXQoKX0gaW1tZWRpYXRlbHkKICAgICAgICAgICBhZnRlciBpbXBvcnRpbmcgcHlwYXJzaW5nLgogICAgICAgICAgIAogICAgICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICAgICBpbXBvcnQgcHlwYXJzaW5nCiAgICAgICAgICAgICAgIHB5cGFyc2luZy5QYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXQoKQogICAgICAgIFROKQdyJgAAANoPX3BhY2tyYXRFbmFibGVkcv0BAAByDwIAAHIJAgAAchQCAAByyAEAACkB2hBjYWNoZV9zaXplX2xpbWl0cnkAAAByeQAAAHJ6AAAA2g1lbmFibGVQYWNrcmF0JQYAAHMMAAAAABsGAQYBCAEMAgwBehtQYXJzZXJFbGVtZW50LmVuYWJsZVBhY2tyYXRjAwAAAAAAAAAAAAAACAAAAAoAAABDAAAAc64AAAB0AKABoQABAHwAagJzFnwAoAOhAAEAfABqBEQAXQx9A3wDoAOhAAEAcRx8AGoFczh8AaAGoQB9AXo8fACgB3wBZAGhAlwCfQR9BXwCcnJ8AKAIfAF8BKECfQR0CYMAdAqDABcAfQZ8BqAHfAF8BKECAQBXAG4wBAB0C2sKcqQBAH0HAQB6EnQAagxykIIAbgR8B4IBVwA1AGQCfQd+B1gAWQBuBlgAfAVTAGQCUwApA2FCBQAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuCiAgICAgICAgVGhpcyBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgdG8gdGhlIGNsaWVudCBjb2RlLCBvbmNlIHRoZSBjb21wbGV0ZQogICAgICAgIGV4cHJlc3Npb24gaGFzIGJlZW4gYnVpbHQuCgogICAgICAgIElmIHlvdSB3YW50IHRoZSBncmFtbWFyIHRvIHJlcXVpcmUgdGhhdCB0aGUgZW50aXJlIGlucHV0IHN0cmluZyBiZQogICAgICAgIHN1Y2Nlc3NmdWxseSBwYXJzZWQsIHRoZW4gc2V0IEN7cGFyc2VBbGx9IHRvIFRydWUgKGVxdWl2YWxlbnQgdG8gZW5kaW5nCiAgICAgICAgdGhlIGdyYW1tYXIgd2l0aCBDe0x7U3RyaW5nRW5kKCl9fSkuCgogICAgICAgIE5vdGU6IEN7cGFyc2VTdHJpbmd9IGltcGxpY2l0bHkgY2FsbHMgQ3tleHBhbmR0YWJzKCl9IG9uIHRoZSBpbnB1dCBzdHJpbmcsCiAgICAgICAgaW4gb3JkZXIgdG8gcmVwb3J0IHByb3BlciBjb2x1bW4gbnVtYmVycyBpbiBwYXJzZSBhY3Rpb25zLgogICAgICAgIElmIHRoZSBpbnB1dCBzdHJpbmcgY29udGFpbnMgdGFicyBhbmQKICAgICAgICB0aGUgZ3JhbW1hciB1c2VzIHBhcnNlIGFjdGlvbnMgdGhhdCB1c2UgdGhlIEN7bG9jfSBhcmd1bWVudCB0byBpbmRleCBpbnRvIHRoZQogICAgICAgIHN0cmluZyBiZWluZyBwYXJzZWQsIHlvdSBjYW4gZW5zdXJlIHlvdSBoYXZlIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBpbnB1dAogICAgICAgIHN0cmluZyBieToKICAgICAgICAgLSBjYWxsaW5nIEN7cGFyc2VXaXRoVGFic30gb24geW91ciBncmFtbWFyIGJlZm9yZSBjYWxsaW5nIEN7cGFyc2VTdHJpbmd9CiAgICAgICAgICAgKHNlZSBMe0l7cGFyc2VXaXRoVGFic308cGFyc2VXaXRoVGFicz59KQogICAgICAgICAtIGRlZmluZSB5b3VyIHBhcnNlIGFjdGlvbiB1c2luZyB0aGUgZnVsbCBDeyhzLGxvYyx0b2tzKX0gc2lnbmF0dXJlLCBhbmQKICAgICAgICAgICByZWZlcmVuY2UgdGhlIGlucHV0IHN0cmluZyB1c2luZyB0aGUgcGFyc2UgYWN0aW9uJ3MgQ3tzfSBhcmd1bWVudAogICAgICAgICAtIGV4cGxpY3RseSBleHBhbmQgdGhlIHRhYnMgaW4geW91ciBpbnB1dCBzdHJpbmcgYmVmb3JlIGNhbGxpbmcKICAgICAgICAgICBDe3BhcnNlU3RyaW5nfQogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScpICAjIC0+IFsnYWFhYWEnXQogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScsIHBhcnNlQWxsPVRydWUpICAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgZW5kIG9mIHRleHQKICAgICAgICByAQAAAE4pDXImAAAAchUCAAByrgEAANoKc3RyZWFtbGluZXKsAQAAcqsBAADaCmV4cGFuZHRhYnNyyAEAAHLfAQAAcg8AAAByKwAAAHIfAAAA2hJ2ZXJib3NlX3N0YWNrdHJhY2UpCHKrAAAAcnUBAADaCHBhcnNlQWxsctkBAABypgAAAHLoAQAA2gJzZXJ8AQAAcnkAAAByeQAAAHJ6AAAA2gtwYXJzZVN0cmluZ0gGAABzJAAAAAAbCAEGAQgCCgEKAQYBCAECARABBAEMAQwBEAEQAQYBBAMWAnoZUGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ2MEAAAAAAAAAAAAAAAPAAAACgAAAGMAAABzNgEAAHwAagBzDnwAoAGhAAEAfABqAkQAXQx9BHwEoAGhAAEAcRR8AGoDczR0BHwBgwGgBaEAfQF0BnwBgwF9BWQBfQZ8AGoHfQd8AGoIfQh0CaAKoQABAGQBfQl6pHwGfAVrAXL6fAl8AmsAcvp6IHwHfAF8BoMCfQp8CHwBfApkAmQDjQNcAn0LfQxXAG4cBAB0C2sKcqYBAAEAAQB8CmQEFwB9BlkAcVpYAHwLfAZrBHLwfAlkBDcAfQl8DHwKfAtmA1YAAQB8A3LqfAd8AXwGgwJ9DXwNfAZrBHLgfAt9BnHufAZkBDcAfQZx+HwLfQZxWnwKZAQXAH0GcVpXAG40BAB0DGsKkAFyMAEAfQ4BAHoUdAlqDZABchyCAG4EfA6CAVcANQBkBX0Ofg5YAFkAbgJYAGQFUwApBmGGBAAACiAgICAgICAgU2NhbiB0aGUgaW5wdXQgc3RyaW5nIGZvciBleHByZXNzaW9uIG1hdGNoZXMuICBFYWNoIG1hdGNoIHdpbGwgcmV0dXJuIHRoZQogICAgICAgIG1hdGNoaW5nIHRva2Vucywgc3RhcnQgbG9jYXRpb24sIGFuZCBlbmQgbG9jYXRpb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBDe21heE1hdGNoZXN9IGFyZ3VtZW50LCB0byBjbGlwIHNjYW5uaW5nIGFmdGVyICduJyBtYXRjaGVzIGFyZSBmb3VuZC4gIElmCiAgICAgICAgQ3tvdmVybGFwfSBpcyBzcGVjaWZpZWQsIHRoZW4gb3ZlcmxhcHBpbmcgbWF0Y2hlcyB3aWxsIGJlIHJlcG9ydGVkLgoKICAgICAgICBOb3RlIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgbG9jYXRpb25zIGFyZSByZXBvcnRlZCByZWxhdGl2ZSB0byB0aGUgc3RyaW5nCiAgICAgICAgYmVpbmcgcGFyc2VkLiAgU2VlIEx7SXtwYXJzZVN0cmluZ308cGFyc2VTdHJpbmc+fSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYXJzaW5nCiAgICAgICAgc3RyaW5ncyB3aXRoIGVtYmVkZGVkIHRhYnMuCgogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICBzb3VyY2UgPSAic2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3IgogICAgICAgICAgICBwcmludChzb3VyY2UpCiAgICAgICAgICAgIGZvciB0b2tlbnMsc3RhcnQsZW5kIGluIFdvcmQoYWxwaGFzKS5zY2FuU3RyaW5nKHNvdXJjZSk6CiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyAnXicqKGVuZC1zdGFydCkpCiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyB0b2tlbnNbMF0pCiAgICAgICAgCiAgICAgICAgcHJpbnRzOjoKICAgICAgICAKICAgICAgICAgICAgc2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3CiAgICAgICAgICAgIF5eXl5eCiAgICAgICAgICAgIHNsZGpmCiAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgogICAgICAgICAgICAgICAgICAgIGxzZGpqa2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZGtqZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGtqc2ZkCiAgICAgICAgcgEAAABGqQFywwEAAHKNAAAATikOcq4BAAByGgIAAHKsAQAAcqsBAAByiAAAAHIbAgAAcvgAAABy3wEAAHLIAQAAciYAAAByFQIAAHIhAAAAch8AAAByHAIAACkPcqsAAABydQEAANoKbWF4TWF0Y2hlc9oHb3ZlcmxhcHLZAQAAct4BAABypgAAANoKcHJlcGFyc2VGbtoHcGFyc2VGbtoHbWF0Y2hlc3LmAQAA2gduZXh0TG9jcugBAADaB25leHRsb2NyfAEAAHJ5AAAAcnkAAAByegAAANoKc2NhblN0cmluZ3oGAABzQgAAAAAeBgEIAQoBCgIGAQwBCAEEAQYBBgEIAQQBAgEQAQIBCgEWAQ4BDgIIAQgBDAEEAQoBCAEGAgoCBgIOARIBCAEEA3oYUGFyc2VyRWxlbWVudC5zY2FuU3RyaW5nYwIAAAAAAAAAAAAAAAgAAAAKAAAAQwAAAHPgAAAAZwB9AmQBfQNkAnwAXwB6nHwAoAF8AaEBRABdWlwDfQR9BX0GfAKgAnwBfAN8BYUCGQChAQEAfARycHQDfAR0BIMCclJ8AnwEoAWhADcAfQJuHnQDfAR0BoMCcmZ8AnwENwB9Am4KfAKgAnwEoQEBAHwGfQNxGnwCoAJ8AXwDZAOFAhkAoQEBAGQEZAWEAHwCRACDAX0CZAagB3QIdAl0CnwCgwGDAqEBVwBTAAQAdAtrCnLaAQB9BwEAehJ0DGoNcsaCAG4EfAeCAVcANQBkA30HfgdYAFkAbgJYAGQDUwApB2FmAwAACiAgICAgICAgRXh0ZW5zaW9uIHRvIEN7THtzY2FuU3RyaW5nfX0sIHRvIG1vZGlmeSBtYXRjaGluZyB0ZXh0IHdpdGggbW9kaWZpZWQgdG9rZW5zIHRoYXQgbWF5CiAgICAgICAgYmUgcmV0dXJuZWQgZnJvbSBhIHBhcnNlIGFjdGlvbi4gIFRvIHVzZSBDe3RyYW5zZm9ybVN0cmluZ30sIGRlZmluZSBhIGdyYW1tYXIgYW5kCiAgICAgICAgYXR0YWNoIGEgcGFyc2UgYWN0aW9uIHRvIGl0IHRoYXQgbW9kaWZpZXMgdGhlIHJldHVybmVkIHRva2VuIGxpc3QuCiAgICAgICAgSW52b2tpbmcgQ3t0cmFuc2Zvcm1TdHJpbmcoKX0gb24gYSB0YXJnZXQgc3RyaW5nIHdpbGwgdGhlbiBzY2FuIGZvciBtYXRjaGVzLAogICAgICAgIGFuZCByZXBsYWNlIHRoZSBtYXRjaGVkIHRleHQgcGF0dGVybnMgYWNjb3JkaW5nIHRvIHRoZSBsb2dpYyBpbiB0aGUgcGFyc2UKICAgICAgICBhY3Rpb24uICBDe3RyYW5zZm9ybVN0cmluZygpfSByZXR1cm5zIHRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgc3RyaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6OgogICAgICAgICAgICB3ZCA9IFdvcmQoYWxwaGFzKQogICAgICAgICAgICB3ZC5zZXRQYXJzZUFjdGlvbihsYW1iZGEgdG9rczogdG9rc1swXS50aXRsZSgpKQogICAgICAgICAgICAKICAgICAgICAgICAgcHJpbnQod2QudHJhbnNmb3JtU3RyaW5nKCJub3cgaXMgdGhlIHdpbnRlciBvZiBvdXIgZGlzY29u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AABzuAEAAHQAfAF0AYMCchZ8AWQBAgB9An0DbuR0AHwBdAKDAnLsfAFkAhcAZANkBIUCGQB9AXwBZAEZAGQDawhySGQBfAFkBRkAZgJ9AXQAfAFkARkAdAGDAnKgfAFkBRkAZANrCHKgfAFkARkAZAFrAnJ2dAOIAYMBUwB8AWQBGQBkBWsCcop0BIgBgwFTAIgBfAFkARkAFAB0A4gBgwEXAFMAcfp0AHwBZAEZAHQBgwJyznQAfAFkBRkAdAGDAnLOfAFcAn0CfQN8A3wCOAB9A3H6dAVkBnQGfAFkARkAgwF0BnwBZAUZAIMBgwOCAW4OdAVkB3QGfAGDAYMCggF8AmQBawCQAXIMdAdkCIMBggF8A2QBawCQAXIedAdkCYMBggF8AnwDBAADAGsCkAFyNmQBawKQAXJCbgQBAG4IdAdkCoMBggF8A5ABcpaHAIcBZgJkC2QMhAiJAHwCkAFyjHwCZAVrApABcnSIAYgAfAODARcAfQRuFnQIiAFnAXwCFACDAYgAfAODARcAfQRuCIgAfAODAX0Ebh58AmQFawKQAXKmiAF9BG4OdAiIAWcBfAIUAIMBfQR8BFMAKQ1h5QMAAAogICAgICAgIEltcGxlbWVudGF0aW9uIG9mICogb3BlcmF0b3IsIGFsbG93cyB1c2Ugb2YgQ3tleHByICogM30gaW4gcGxhY2Ugb2YKICAgICAgICBDe2V4cHIgKyBleHByICsgZXhwcn0uICBFeHByZXNzaW9ucyBtYXkgYWxzbyBtZSBtdWx0aXBsaWVkIGJ5IGEgMi1pbnRlZ2VyCiAgICAgICAgdHVwbGUsIHNpbWlsYXIgdG8gQ3t7bWluLG1heH19IG11bHRpcGxpZXJzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMuICBUdXBsZXMKICAgICAgICBtYXkgYWxzbyBpbmNsdWRlIEN7Tm9uZX0gYXMgaW46CiAgICAgICAgIC0gQ3tleHByKihuLE5vbmUpfSBvciBDe2V4cHIqKG4sKX0gaXMgZXF1aXZhbGVudAogICAgICAgICAgICAgIHRvIEN7ZXhwcipuICsgTHtaZXJvT3JNb3JlfShleHByKX0KICAgICAgICAgICAgICAocmVhZCBhcyAiYXQgbGVhc3QgbiBpbnN0YW5jZXMgb2YgQ3tleHByfSIpCiAgICAgICAgIC0gQ3tleHByKihOb25lLG4pfSBpcyBlcXVpdmFsZW50IHRvIEN7ZXhwciooMCxuKX0KICAgICAgICAgICAgICAocmVhZCBhcyAiMCB0byBuIGluc3RhbmNlcyBvZiBDe2V4cHJ9IikKICAgICAgICAgLSBDe2V4cHIqKE5vbmUsTm9uZSl9IGlzIGVxdWl2YWxlbnQgdG8gQ3tMe1plcm9Pck1vcmV9KGV4cHIpfQogICAgICAgICAtIEN7ZXhwciooMSxOb25lKX0gaXMgZXF1aXZhbGVudCB0byBDe0x7T25lT3JNb3JlfShleHByKX0KCiAgICAgICAgTm90ZSB0aGF0IEN7ZXhwciooTm9uZSxuKX0gZG9lcyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmCiAgICAgICAgbW9yZSB0aGFuIG4gZXhwcnMgZXhpc3QgaW4gdGhlIGlucHV0IHN0cmVhbTsgdGhhdCBpcywKICAgICAgICBDe2V4cHIqKE5vbmUsbil9IGRvZXMgbm90IGVuZm9yY2UgYSBtYXhpbXVtIG51bWJlciBvZiBleHByCiAgICAgICAgb2NjdXJyZW5jZXMuICBJZiB0aGlzIGJlaGF2aW9yIGlzIGRlc2lyZWQsIHRoZW4gd3JpdGUKICAgICAgICBDe2V4cHIqKE5vbmUsbikgKyB+ZXhwcn0KICAgICAgICByAQAAACkCTk5OcnMAAAByjQAAAHo3Y2Fubm90IG11bHRpcGx5ICdQYXJzZXJFbGVtZW50JyBhbmQgKCclcycsJyVzJykgb2JqZWN0c3owY2Fubm90IG11bHRpcGx5ICdQYXJzZXJFbGVtZW50JyBhbmQgJyVzJyBvYmplY3Rzei9jYW5ub3QgbXVsdGlwbHkgUGFyc2VyRWxlbWVudCBieSBuZWdhdGl2ZSB2YWx1ZXpAc2Vjb25kIHR1cGxlIHZhbHVlIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byBmaXJzdCB0dXBsZSB2YWx1ZXorY2Fubm90IG11bHRpcGx5IFBhcnNlckVsZW1lbnQgYnkgMCBvciAoMCwwKWMBAAAAAAAAAAAAAAABAAAABQAAABMAAABzKAAAAHwAZAFrBHIcdACIAYgAfABkARgAgwEXAIMBUwB0AIgB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aGFyIDEyKSwgKGxpbmU6MSwgY29sOjEzKQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDE1KDEsMTYpCiAgICAgICAgICAgIEV4Y2VwdGlvbiByYWlzZWQ6RXhwZWN0ZWQgYWxwaGF3b3JkIChhdCBjaGFyIDE1KSwgKGxpbmU6MSwgY29sOjE2KQoKICAgICAgICBUaGUgb3V0cHV0IHNob3duIGlzIHRoYXQgcHJvZHVjZWQgYnkgdGhlIGRlZmF1bHQgZGVidWcgYWN0aW9ucyAtIGN1c3RvbSBkZWJ1ZyBhY3Rpb25zIGNhbiBiZQogICAgICAgIHNwZWNpZmllZCB1c2luZyBMe3NldERlYnVnQWN0aW9uc30uIFByaW9yIHRvIGF0dGVtcHRpbmcKICAgICAgICB0byBtYXRjaCB0aGUgQ3t3ZH0gZXhwcmVzc2lvbiwgdGhlIGRlYnVnZ2luZyBtZXNzYWdlIEN7Ik1hdGNoIDxleHBybmFtZT4gYXQgbG9jIDxuPig8bGluZT4sPGNvbD4pIn0KICAgICAgICBpcyBzaG93bi4gVGhlbiBpZiB0aGUgcGFyc2Ugc3VjY2VlZHMsIGEgQ3siTWF0Y2hlZCJ9IG1lc3NhZ2UgaXMgc2hvd24sIG9yIGFuIEN7IkV4Y2VwdGlvbiByYWlzZWQifQogICAgICAgIG1lc3NhZ2UgaXMgc2hvd24uIEFsc28gbm90ZSB0aGUgdXNlIG9mIEx7c2V0TmFtZX0gdG8gYXNzaWduIGEgaHVtYW4tcmVhZGFibGUgbmFtZSB0byB0aGUgZXhwcmVzc2lvbiwKICAgICAgICB3aGljaCBtYWtlcyBkZWJ1Z2dpbmcgYW5kIGV4Y2VwdGlvbiBtZXNzYWdlcyBlYXNpZXIgdG8gdW5kZXJzdGFuZCAtIGZvciBpbnN0YW5jZSwgdGhlIGRlZmF1bHQKICAgICAgICBuYW1lIGNyZWF0ZWQgZm9yIHRoZSBDe1dvcmR9IGV4cHJlc3Npb24gd2l0aG91dCBjYWxsaW5nIEN7c2V0TmFtZX0gaXMgQ3siVzooQUJDRC4uLikifS4KICAgICAgICBGKQVyVgIAAHJ3AQAAcnsBAAByfQEAAHKtAQAAKQJyqwAAANoEZmxhZ3J5AAAAcnkAAAByegAA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A3QEagV8AaAGoQCgB6EAgwKDAX0BdAB8A3QBgwJyNHQIfAODAX0DZwB9B2cAfQhkAX0JfAFEAJABXaJ9CnwDZAJrCXJefAOgCXwKZAOhAnNmfAhycnwKc3J8CKAKfAqhAQEAcUR8CnN4cURkBKALfAihAXwKZwJ9C2cAfQh6OnwKoAxkBWQEoQJ9CnwAag18CnwCZAaNAn0MfAugCnwMag58BGQHjQGhAQEAfAlvwHwGDAB9CVcAbvAEAHQPawqQAXJyAQB9DQEAeo50AHwNdBCDAnLmZAhuAmQJfQ5kBHwKawaQAXIqfAugCnQRfA1qEnwKgwKhAQEAfAugCmQKdBN8DWoSfAqDAmQLGAAUAGQMFwB8DhcAoQEBAG4YfAugCmQKfA1qEhQAZAwXAHwOFwChAQEAfAugCmQNdAR8DYMBFwChAQEAfAmQAW9cfAZ9CXwNfQxXADUAZAJ9DX4NWABZAG5EBAB0FGsKkAFytAEAfQ8BAHokfAugCmQOdAR8D4MBFwChAQEAfAmQAW+efAZ9CXwPfQxXADUAZAJ9D34PWABZAG4CWAB8BZABctp8BJABcsx8C6AKZAmhAQEAdBVkBKALfAuhAYMBAQB8B6AKfAp8DGYCoQEBAHFEfAl8B2YCUwApD2EzDAAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiBvbiBhIHNlcmllcyBvZiB0ZXN0IHN0cmluZ3MsIHNob3dpbmcgZWFjaAogICAgICAgIHRlc3QsIHRoZSBwYXJzZWQgcmVzdWx0cyBvciB3aGVyZSB0aGUgcGFyc2UgZmFpbGVkLiBRdWljayBhbmQgZWFzeSB3YXkgdG8KICAgICAgICBydW4gYSBwYXJzZSBleHByZXNzaW9uIGFnYWluc3QgYSBsaXN0IG9mIHNhbXBsZSBzdHJpbmdzLgogICAgICAgICAgIAogICAgICAgIFBhcmFtZXRlcnM6CiAgICAgICAgIC0gdGVzdHMgLSBhIGxpc3Qgb2Ygc2VwYXJhdGUgdGVzdCBzdHJpbmdzLCBvciBhIG11bHRpbGluZSBzdHJpbmcgb2YgdGVzdCBzdHJpbmdzCiAgICAgICAgIC0gcGFyc2VBbGwgLSAoZGVmYXVsdD1De1RydWV9KSAtIGZsYWcgdG8gcGFzcyB0byBDe0x7cGFyc2VTdHJpbmd9fSB3aGVuIHJ1bm5pbmcgdGVzdHMgICAgICAgICAgIAogICAgICAgICAtIGNvbW1lbnQgLSAoZGVmYXVsdD1DeycjJ30pIC0gZXhwcmVzc2lvbiBmb3IgaW5kaWNhdGluZyBlbWJlZGRlZCBjb21tZW50cyBpbiB0aGUgdGVzdCAKICAgICAgICAgICAgICBzdHJpbmc7IHBhc3MgTm9uZSB0byBkaXNhYmxlIGNvbW1lbnQgZmlsdGVyaW5nCiAgICAgICAgIC0gZnVsbER1bXAgLSAoZGVmYXVsdD1De1RydWV9KSAtIGR1bXAgcmVzdWx0cyBhcyBsaXN0IGZvbGxvd2VkIGJ5IHJlc3VsdHMgbmFtZXMgaW4gbmVzdGVkIG91dGxpbmU7CiAgICAgICAgICAgICAgaWYgRmFsc2UsIG9ubHkgZHVtcCBuZXN0ZWQgbGlzdAogICAgICAgICAtIHByaW50UmVzdWx0cyAtIChkZWZhdWx0PUN7VHJ1ZX0pIHByaW50cyB0ZXN0IG91dHB1dCB0byBzdGRvdXQKICAgICAgICAgLSBmYWlsdXJlVGVzdHMgLSAoZGVmYXVsdD1De0ZhbHNlfSkgaW5kaWNhdGVzIGlmIHRoZXNlIHRlc3RzIGFyZSBleHBlY3RlZCB0byBmYWlsIHBhcnNpbmcKCiAgICAgICAgUmV0dXJuczogYSAoc3VjY2VzcywgcmVzdWx0cykgdHVwbGUsIHdoZXJlIHN1Y2Nlc3MgaW5kaWNhdGVzIHRoYXQgYWxsIHRlc3RzIHN1Y2NlZWRlZAogICAgICAgIChvciBmYWlsZWQgaWYgQ3tmYWlsdXJlVGVzdHN9IGlzIFRydWUpLCBhbmQgdGhlIHJlc3VsdHMgY29udGFpbiBhIGxpc3Qgb2YgbGluZXMgb2YgZWFjaCAKICAgICAgICB0ZXN0J3Mgb3V0cHV0CiAgICAgICAgCiAgICAgICAgRXhhbXBsZTo6CiAgICAgICAgICAgIG51bWJlcl9leHByID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIuY29weSgpCgogICAgICAgICAgICByZXN1bHQgPSBudW1iZXJfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgICAgICMgdW5zaWduZWQgaW50ZWdlcgogICAgICAgICAgICAgICAgMTAwCiAgICAgICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgICAgICA2LjAyZTIzCiAgICAgICAgICAgICAgICAjIGludGVnZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAgICAgJycnKQogICAgICAgICAgICBwcmludCgiU3VjY2VzcyIgaWYgcmVzdWx0WzBdIGVsc2UgIkZhaWxlZCEiKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHN0cmF5IGNoYXJhY3RlcgogICAgICAgICAgICAgICAgMTAwWgogICAgICAgICAgICAgICAgIyBtaXNzaW5nIGxlYWRpbmcgZGlnaXQgYmVmb3JlICcuJwogICAgICAgICAgICAgICAgLS4xMDAKICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgJy4nCiAgICAgICAgICAgICAgICAzLjE0LjE1OQogICAgICAgICAgICAgICAgJycnLCBmYWlsdXJlVGVzdHM9VHJ1ZSkKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKICAgICAgICBwcmludHM6OgogICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIFsxMDBdCgogICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICBbLTEwMF0KCiAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICBbMWUtMTJdCgogICAgICAgICAgICBTdWNjZXNzCiAgICAgICAgICAgIAogICAgICAgICAgICAjIHN0cmF5IGNoYXJhY3RlcgogICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgMyksIChsaW5lOjEsIGNvbDo0KQoKICAgICAgICAgICAgIyBtaXNzaW5nIGxlYWRpbmcgZGlnaXQgYmVmb3JlICcuJwogICAgICAgICAgICAtLjEwMAogICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIHtyZWFsIG51bWJlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24gfCByZWFsIG51bWJlciB8IHNpZ25lZCBpbnRlZ2VyfSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCgogICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAzLjE0LjE1OQogICAgICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciA0KSwgKGxpbmU6MSwgY29sOjUpCgogICAgICAgICAgICBTdWNjZXNzCgogICAgICAgIEVhY2ggdGVzdCBzdHJpbmcgbXVzdCBiZSBvbiBhIHNpbmdsZSBsaW5lLiBJZiB5b3Ugd2FudCB0byB0ZXN0IGEgc3RyaW5nIHRoYXQgc3BhbnMgbXVsdGlwbGUKICAgICAgICBsaW5lcywgY3JlYXRlIGEgdGVzdCBsaWtlIHRoaXM6OgoKICAgICAgICAgICAgZXhwci5ydW5UZXN0KHIidGhpcyBpcyBhIHRlc3RcbiBvZiBzdHJpbmdzIHRoYXQgc3BhbnMgXG4gMyBsaW5lcyIpCiAgICAgICAgCiAgICAgICAgKE5vdGUgdGhhdCB0aGlzIGlzIGEgcmF3IHN0cmluZyBsaXRlcmFsLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBsZWFkaW5n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Y2gKICAgIAogICAgVGhlIHJlc3VsdHMgZnJvbSBhIHN1Y2Nlc3NmdWwgcGFyc2Ugd2lsbCBjb250YWluIHRoZSBtYXRjaGVkIHRleHQgZnJvbSB0aGUgaW5wdXQgc3RyaW5nIGFuZCB0aGUgZm9sbG93aW5nIG5hbWVkIHJlc3VsdHM6CiAgICAgLSBDe21pc21hdGNoZXN9IC0gYSBsaXN0IG9mIHRoZSBwb3NpdGlvbnMgd2l0aGluIHRoZSBtYXRjaF9zdHJpbmcgd2hlcmUgbWlzbWF0Y2hlcyB3ZXJlIGZvdW5kCiAgICAgLSBDe29yaWdpbmFsfSAtIHRoZSBvcmlnaW5hbCBtYXRjaF9zdHJpbmcgdXNlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIGlucHV0IHN0cmluZwogICAgCiAgICBJZiBDe21pc21hdGNoZXN9IGlzIGFuIGVtcHR5IGxpc3QsIHRoZW4gdGhlIG1hdGNoIHdhcyBhbiBleGFjdCBtYXRjaC4KICAgIAogICAgRXhhbXBsZTo6CiAgICAgICAgcGF0dCA9IENsb3NlTWF0Y2goIkFUQ0FUQ0dBQVRHR0EiKQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FUQ0dBQVhHR0EiKSAjIC0+IChbJ0FUQ0FUQ0dBQVhHR0EnXSwgeydtaXNtYXRjaGVzJzogW1s5XV0sICdvcmlnaW5hbCc6IFsnQVRDQVRDR0FBVEdHQSddfSkKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBWENHQUFYR0dBIikgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkICdBVENBVENHQUFUR0dBJyAod2l0aCB1cCB0byAxIG1pc21hdGNoZXMpIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKCiAgICAgICAgIyBleGFjdCBtYXRjaAogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FUQ0dBQVRHR0EiKSAjIC0+IChbJ0FUQ0FUQ0dBQVRHR0EnXSwgeydtaXNtYXRjaGVzJzogW1tdXSwgJ29yaWdpbmFsJzogWydBVENBVENHQUFUR0dBJ119KQoKICAgICAgICAjIGNsb3NlIG1hdGNoIGFsbG93aW5nIHVwIHRv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ICBleGNlcHQgZm9yIG9uZSBvciB0d28gY2hhcmFjdGVycywgZm9yIGluc3RhbmNlLgogICAgCiAgICBMe3NyYW5nZX0gaXMgdXNlZnVsIGZvciBkZWZpbmluZyBjdXN0b20gY2hhcmFjdGVyIHNldCBzdHJpbmdzIGZvciBkZWZpbmluZyAKICAgIEN7V29yZH0gZXhwcmVzc2lvbnMsIHVzaW5nIHJhbmdlIG5vdGF0aW9uIGZyb20gcmVndWxhciBleHByZXNzaW9uIGNoYXJhY3RlciBzZXRzLgogICAgCiAgICBBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHVzZSBDe1dvcmR9IHRvIG1hdGNoIGEgc3BlY2lmaWMgbGl0ZXJhbCBzdHJpbmcsIGFzIGluIAogICAgQ3tXb3JkKCJBZGRyZXNzIil9LiBSZW1lbWJlciB0aGF0IEN7V29yZH0gdXNlcyB0aGUgc3RyaW5nIGFyZ3VtZW50IHRvIGRlZmluZQogICAgSXtzZXRzfSBvZiBtYXRjaGFibGUgY2hhcmFjdGVycy4gVGhpcyBleHByZXNzaW9uIHdvdWxkIG1hdGNoICJBZGQiLCAiQUFBIiwKICAgICJkQXJlZCIsIG9yIGFueSBvdGhlciB3b3JkIG1hZGUgdXAgb2YgdGhlIGNoYXJhY3RlcnMgJ0EnLCAnZCcsICdyJywgJ2UnLCBhbmQgJ3MnLgogICAgVG8gbWF0Y2ggYW4gZXhhY3QgbGl0ZXJhbCBzdHJpbmcsIHVzZSBMe0xpdGVyYWx9IG9yIEx7S2V5d29yZH0uCgogICAgcHlwYXJzaW5nIGluY2x1ZGVzIGhlbHBlciBzdHJpbmdzIGZvciBidWlsZGluZyBXb3JkczoKICAgICAtIEx7YWxwaGFzfQogICAgIC0gTHtudW1zfQogICAgIC0gTHthbHBoYW51bXN9CiAgICAgLSBMe2hleG51bXN9CiAgICAgLSBMe2FscGhhczhiaXR9IChhbHBoYWJldGljIGNoYXJhY3RlcnMgaW4gQVNDSUkgcmFuZ2UgMTI4LTI1NSAtIGFjY2VudGVkLCB0aWxkZWQsIHVtbGF1dGVkLCBldGMuKQogICAgIC0gTHtwdW5jOGJpdH0gKG5vbi1hbHBoYWJldGljIGNoYXJhY3RlcnMg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CiAgICBNYXkgYmUgY29uc3RydWN0ZWQgdXNpbmcgdGhlIEN7JyYnfSBvcGVyYXRvci4KCiAgICBFeGFtcGxlOjoKICAgICAgICBjb2xvciA9IG9uZU9mKCJSRUQgT1JBTkdFIFlFTExPVyBHUkVFTiBCTFVFIFBVUlBMRSBCTEFDSyBXSElURSBCUk9XTiIpCiAgICAgICAgc2hhcGVfdHlwZSA9IG9uZU9mKCJTUVVBUkUgQ0lSQ0xFIFRSSUFOR0xFIFNUQVIgSEVYQUdPTiBPQ1RBR09OIikKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIHNoYXBlX2F0dHIgPSAic2hhcGU6IiArIHNoYXBlX3R5cGUoInNoYXBlIikKICAgICAgICBwb3NuX2F0dHIgPSAicG9zbjoiICsgR3JvdXAoaW50ZWdlcigieCIpICsgJywnICsgaW50ZWdlcigieSIpKSgicG9zbiIpCiAgICAgICAgY29sb3JfYXR0ciA9ICJjb2xvcjoiICsgY29sb3IoImNvbG9yIikKICAgICAgICBzaXplX2F0dHIgPSAic2l6ZToiICsgaW50ZWdlcigic2l6ZSIpCgogICAgICAgICMgdXNlIEVhY2ggKHVzaW5nIG9wZXJhdG9yICcmJykgdG8gYWNjZXB0IGF0dHJpYnV0ZXMgaW4gYW55IG9yZGVyIAogICAgICAgICMgKHNoYXBlIGFuZCBwb3NuIGFyZSByZXF1aXJlZCwgY29sb3IgYW5kIHNpemUgYXJlIG9wdGlvbmFsKQogICAgICAgIHNoYXBlX3NwZWMgPSBzaGFwZV9hdHRyICYgcG9zbl9hdHRyICYgT3B0aW9uYWwoY29sb3JfYXR0cikgJiBPcHRpb25hbChzaXplX2F0dHIpCgogICAgICAgIHNoYXBlX3NwZWMucnVuVGVzdHMoJycnCiAgICAgICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgICAgIHNoYXBlOiBDSVJDTEUgc2l6ZTogNTAgY29sb3I6IEJMVUUgcG9zbjogNTAsODAKICAgICAgICAgICAgY29sb3I6R1JFRU4gc2l6ZToyMCBzaGFwZTpUUklBTkdMRSBwb3NuOjIwLDQwCiAgICAgICAgICAgICcnJwogICAgICAgICAgICApCiAgICBwcmludHM6OgogICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgWydzaGFwZTonLCAnU1FVQVJFJywgJ2NvbG9yOicsICdCTEFDSycsICdwb3NuOicsIFsnMTAwJywgJywnLCAnMTIwJ11dCiAgICAgICAgLSBjb2xvcjogQkxBQ0sKICAgICAgICAtIHBvc246IFsnMTAwJywgJywnLCAnMTIwJ10KICAgICAgICAgIC0geDogMTAwCiAgICAgICAgICAtIHk6IDEyMAogICAgICAgIC0gc2hhcGU6IFNRVUFSRQoKCiAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgIFsnc2hhcGU6JywgJ0NJUkNMRScsICdzaXplOicsICc1MCcsICdjb2xvcjonLCAnQkxVRScsICdwb3NuOicsIFsnNTAnLCAnLCcsICc4MCddXQogICAgICAgIC0gY29sb3I6IEJMVUUKICAgICAgICAtIHBvc246IFsnNTAnLCAnLCcsICc4MCddCiAgICAgICAgICAtIHg6IDUwCiAgICAgICAgICAtIHk6IDgwCiAgICAgICAgLSBzaGFwZTogQ0lSQ0xFCiAgICAgICAgLSBzaXplOiA1MAoKCiAgICAgICAgY29sb3I6IEdSRUVOIHNpemU6IDIwIHNoYXBlOiBUUklBTkdMRSBwb3NuOiAyMCw0MAogICAgICAgIFsnY29sb3I6JywgJ0dSRUVOJywgJ3NpemU6JywgJzIwJywgJ3NoYXBlOicsICdUUklBTkdMRScsICdwb3NuOicsIFsnMjAnLCAnLCcsICc0MCddXQogICAgICAgIC0gY29sb3I6IEdSRUVOCiAgICAgICAgLSBwb3NuOiBbJzIwJywgJywnLCAnNDAnXQogICAgICAgICAgLSB4OiAyMAogICAgICAgICAgLSB5OiA0MAogICAgICAgIC0gc2hhcGU6IFRSSUFOR0xFCiAgICAgICAgLSBzaXplOiAyMAogICAgVGMDAAAAAAAAAAAAAAADAAAABAAAAAMAAABzOAAAAHQAdAF8AIMCoAJ8AXwCoQIBAHQDZAFkAoQAfABqBEQAgwGDAXwAXwVkA3wAXwZkA3wAXwdkAFMAKQROYwEAAAAAAAAAAAAAAAIAAAACAAAAcwAAAHMUAAAAfABdDH0BfAFqAFYAAQBxAmQAUwByiQAAAHLzAgAAcu8CAAByeQAAAHJ5AAAAcnoAAAByjAAAAD8OAABzBAAAAAQAAgB6IEVhY2guX19pbml0X18uPGxvY2Fscz4uPGdlbmV4cHI+VCkIcmQCAAByDgAAAHKtAAAAcu0CAABy7AIAAHKqAQAAcqcBAADaDmluaXRFeHByR3JvdXBzcu4CAAByZQIAAHJ5AAAAcnoAAAByrQAAAD0OAABzCAAAAAABEgEWAQYBeg1FYWNoLl9faW5pdF9fYwQAAAAAAAAAAAAAABEAAAAJAAAAAwAAAHPuAQAAfABqAHKSdAFkAWQChAB8AGoCRACDAYMBfABfA2QDZASEAHwAagJEAIMBfQRkBWQEhAB8AGoCRACDAX0FfAR8BRcAfABfBGQGZASEAHwAagJEAIMBfABfBWQHZASEAHwAagJEAIMBfABfBmQIZASEAHwAagJEAIMBfABfB3wABABqB3wAagY3AAIAXwdkCXwAXwB8An0GfABqB2QAZACFAhkAfQd8AGoEZABkAIUCGQCJAGcAfQhkCn0JfAmQAXJqfAeIABcAfABqBRcAfABqBhcAfQpnAH0LfApEAF12fQx6EHwMoAh8AXwGoQJ9BlcAbiAEAHQJawqQAXIQAQABAAEAfAugCnwMoQEBAFkAcdxYAHwIoAp8AGoDoAt0DHwMgwF8DKECoQEBAHwMfAdrBpABckB8B6ANfAyhAQEAcdx8DIgAawZy3IgAoA18DKEBAQBx3HQOfAuDAXQOfAqDAWsCcrpkCX0Jcbp8B5ABcpRkC6APZAxkAoQAfAdEAIMBoQF9DXQJfAF8AmQNfA0WAIMDggF8CIcAZgFkDmQEhAh8AGoCRACDATcAfQhnAH0OfAhEAF0ifQx8DKAQfAF8AnwDoQNcAn0CfQ98DqAKfA+hAQEAkAFxtHQRfA50EmcAgwGDAn0QfAJ8EGYCUwApD05jAQAAAAAAAAAAAAAAAgAAAAQAAABzAAAAcyYAAAB8AF0efQF0AHwBdAGDAnICdAJ8AWoDgwF8AWYCVgABAHECZABTAHKJAAAAKQRyfQAAAHIdAAAAcmkCAABydgEAAHLvAgAAcnkAAAByeQAAAHJ6AAAAcowAAABFDgAAcwYAAAAEAAIACgB6IUVhY2gucGFyc2VJbXBsLjxsb2NhbHM+LjxnZW5leHByPmMBAAAAAAAAAAAAAAACAAAABQAAAFMAAABzHAAAAGcAfABdFH0BdAB8AXQBgwJyBHwBagKRAnEEUwByeQAAAKkDcn0AAAByHQAAAHJ2AQAAcu8CAAByeQAAAHJ5AAAAcnoAAABy8AAAAEYOAABzBgAAAAYAAgAKAHoiRWFjaC5wYXJzZUltcGwuPGxvY2Fscz4uPGxpc3Rjb21wPmMBAAAAAAAAAAAAAAACAAAABQAAAFMAAABzIAAAAGcAfABdGH0BfAFqAHIEdAF8AXQCgwJzBHwBkQJxBFMAcnkAAAApA3KqAQAAcn0AAAByHQAAAHLvAgAAcnkAAAByeQAAAHJ6AAAAcvAAAABHDgAAcwgAAAAGAAIABgAKAGMBAAAAAAAAAAAAAAACAAAABQAAAFMAAABzHAAAAGcAfABdFH0BdAB8AXQBgwJyBHwBagKRAnEEUwByeQAAACkDcn0AAAByNAAAAHJ2AQAAcu8CAAByeQAAAHJ5AAAAcnoAAABy8AAAAEkOAABzBgAAAAYAAgAKAGMBAAAAAAAAAAAAAAACAAAABQAAAFMAAABzHAAAAGcAfABdFH0BdAB8AXQBgwJyBHwBagKRAnEEUwByeQAAACkDcn0AAAByGwAAAHJ2AQAAcu8CAAByeQAAAHJ5AAAAcnoAAABy8AAAAEoOAABzBgAAAAYAAgAKAGMBAAAAAAAAAAAAAAACAAAABwAAAFMAAABzIAAAAGcAfABdGH0BdAB8AXQBdAJ0A2YDgwJzBHwBkQJxBFMAcnkAAAApBHJ9AAAAch0AAAByNAAAAHIbAAAAcu8CAAByeQAAAHJ5AAAAcnoAAABy8AAAAEsOAABzBgAAAAYAAgAQAEZUcjoBAABjAQAAAAAAAAAAAAAAAgAAAAMAAABzAAAAcxYAAAB8AF0OfQF0AHwBgwFWAAEAcQJkAFMAcokAAABytwAAAHLvAgAAcnkAAAByeQAAAHJ6AAAAcowAAABmDgAAcwQAAAAEAAIAeipNaXNzaW5nIG9uZSBvciBtb3JlIHJlcXVpcmVkIGVsZW1lbnRzICglcyljAQAAAAAAAAAAAAAAAgAAAAUAAAATAAAAcyQAAABnAHwAXRx9AXQAfAF0AYMCcgR8AWoCiABrBnIEfAGRAnEEUwByeQAAAHIKAwAAcu8CAACpAdoGdG1wT3B0cnkAAAByegAAAHLwAAAAag4AAHMIAAAABgACAAoACgApE3IJAwAAcuYAAABy7AIAANoHb3B0MW1hcNoJb3B0aW9uYWxz2g5tdWx0aW9wdGlvbmFsc9oNbXVsdGlyZXF1aXJlZNoIcmVxdWlyZWRy7QEAAHIhAAAAciQBAABy8gAAAHJpAgAA2gZyZW1vdmVy+AAAAHK6AAAAcsgBAADaA3N1bXIkAAAAKRFyqwAAAHJ1AQAAcqYAAABywgEAANoEb3B0MdoEb3B0MtoGdG1wTG9j2gd0bXBSZXFk2gptYXRjaE9yZGVy2gxrZWVwTWF0Y2hpbmfaCHRtcEV4cHJz2gZmYWlsZWRy2QEAANoHbWlzc2luZ3L1AgAAcqACAADaDGZpbmFsUmVzdWx0c3J5AAAAcgsDAAByegAAAHLhAQAAQw4AAHNQAAAAAAEGARYBEAEQAQoBEgESARIBEAEGAQQBDgEOAQQCBAEGARQBBAEIAQIBEAEQARACGAEKAQwBCAEMARABBgIGARQBEAMYAgQBCAESAQ4CDgF6DkVhY2gucGFyc2VJbXBsYwEAAAAAAAAAAAAAAAEAAAAFAAAAQwAAAHNAAAAAdAB8AGQBgwJyEHwAagFTAHwAagJkAGsIcjpkAmQDoANkBGQFhAB8AGoERACDAaEBFwBkBhcAfABfAnwAagJTACkHTnLaAAAAcvsCAAB6AyAmIGMBAAAAAAAAAAAAAAACAAAAAwAAAHMAAABzFgAAAHwAXQ59AXQAfAGDAVYAAQBxAmQAUwByiQAAAHK3AAAAcu8CAAByeQAAAHJ5AAAAcnoAAAByjAAAAHkOAABzBAAAAAQAAgB6H0VhY2guX19zdHJfXy48bG9jYWxzPi48Z2VuZXhwcj5y/AIAAHL9AgAAcrUAAAByeQAAAHJ5AAAAcnoAAABytgAAAHQOAABzCgAAAAABCgEGAgoBIAJ6DEVhY2guX19zdHJfX2MCAAAAAAAAAAAAAAAEAAAABAAAAEMAAABzLAAAAHwBZABkAIUCGQB8AGcBFwB9AnwAagBEAF0OfQN8A6ABfAKhAQEAcRhkAFMAcokAAAByBgMAAHL5AgAAcnkAAAByeQAAAHJ6AAAAclkCAAB9DgAAcwYAAAAAARIBCgF6E0VhY2guY2hlY2tSZWN1cnNpb24pAVQpAVQpCXKbAAAAcpwAAABynQAAAHLDAAAAcq0AAABy4QEAAHK2AAAAclkCAABygQIAAHJ5AAAAcnkAAAByZQIAAHJ6AAAAcg4AAAAHDgAAcwoAAAAIAQQ1DgYKMQgJYwAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAHNsAAAAZQBaAWQAWgJkAVoDZBSHAGYBZANkBIQJWgRkFWQGZAeEAVoFZAhkCYQAWgaHAGYBZApkC4QIWgeHAGYBZAxkDYQIWghkDmQPhABaCWcAZgFkEGQRhAFaCocAZgFkEmQThAhaC4cABABaDFMAKRZyIAAAAHphCiAgICBBYnN0cmFjdCBzdWJjbGFzcyBvZiBDe1BhcnNlckVsZW1lbnR9LCBmb3IgY29tYmluaW5nIGFuZCBwb3N0LXByb2Nlc3NpbmcgcGFyc2VkIHRva2Vucy4KICAgIEZjAwAAAAAAAAAAAAAAAwAAAAQAAAADAAAAc5oAAAB0AHQBfACDAqACfAKhAQEAdAN8AXQEgwJyQHQFdAZqB3QIgwJyMnQGoAd8AaEBfQFuDnQGoAd0CXwBgwGhAX0BfAF8AF8KZAB8AF8LfAFkAGsJcpZ8AWoMfABfDHwBag18AF8NfACgDnwBag+hAQEAfAFqEHwAXxB8AWoRfABfEXwBahJ8AF8SfABqE6AUfAFqE6EBAQBkAFMAcokAAAApFXJkAgAAciAAAAByrQAAAHJ9AAAAcugAAADaCmlzc3ViY2xhc3NyJgAAAHKgAQAAci4AAAByFwAAAHJ2AQAAcqQBAAByrwEAAHKqAQAAclACAAByqAEAAHKnAQAAcqYBAABytAEAAHKsAQAAciYBAACpA3KrAAAAcnYBAABytgEAAHJlAgAAcnkAAAByegAAAHKtAAAAhw4AAHMeAAAAAAEQAQoBDAEMAg4BBgEGAQgBCAEIAQwBCAEIAQgBehxQYXJzZUVsZW1lbnRFbmhhbmNlLl9faW5pdF9fVGMEAAAAAAAAAAAAAAAEAAAABgAAAEMAAABzMgAAAHwAagBkAGsJch58AGoAagF8AXwCfANkAWQCjQRTAHQCZAN8AnwAagN8AIMEggFkAFMAKQRORnIgAgAAcqAAAAApBHJ2AQAAcsgBAAByIQAAAHKwAQAAcuABAAByeQAAAHJ5AAAAcnoAAABy4QEAAJkOAABzBgAAAAABCgEUAnodUGFyc2VFbGVtZW50RW5oYW5jZS5wYXJzZUltcGxjAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcyoAAABkAXwAXwB8AGoBoAKhAHwAXwF8AGoBZABrCXImfABqAaADoQABAHwAUwByAAIAACkEcqcBAABydgEAAHLpAAAAck8CAABytQAAAHJ5AAAAcnkAAAByegAAAHJPAgAAnw4AAHMKAAAAAAEGAQwBCgEKAXojUGFyc2VFbGVtZW50RW5oYW5jZS5sZWF2ZVdoaXRlc3BhY2VjAgAAAAAAAAAAAAAAAgAAAAQAAAADAAAAc3IAAAB0AHwBdAGDAnJCfAF8AGoCawdybnQDdAR8AIMCoAV8AaEBAQB8AGoGZABrCXJufABqBqAFfABqAmQBGQChAQEAbix0A3QEfACDAqAFfAGhAQEAfABqBmQAawlybnwAagagBXwAagJkARkAoQEBAHwAUwByDAEAACkHcn0AAAByLQAAAHKsAQAAcmQCAAByIAAAAHJSAgAAcnYBAAByNwEAAHJlAgAAcnkAAAByegAAAHJSAgAApg4AAHMSAAAAAAEKAQoBEAEKARQCEAEKARIBehpQYXJzZUVsZW1lbnRFbmhhbmNlLmlnbm9yZWMBAAAAAAAAAAAAAAABAAAAAwAAAAMAAABzJgAAAHQAdAF8AIMCoAKhAAEAfABqA2QAawlyInwAagOgAqEAAQB8AFMAcokAAAApBHJkAgAAciAAAAByGgIAAHJ2AQAAcrUAAAByZQIAAHJ5AAAAcnoAAAByGgIAALIOAABzCAAAAAABDgEKAQoBeh5QYXJzZUVsZW1lbnRFbmhhbmNlLnN0cmVhbWxpbmVjAgAAAAAAAAAAAAAAAwAAAAMAAABDAAAAc0IAAAB8AHwBawZyFnQAfAF8AGcBFwCDAYIBfAFkAGQAhQIZAHwAZwEXAH0CfABqAWQAawlyPnwAagGgAnwCoQEBAGQAUwByiQAAACkDcigAAABydgEAAHJZAgAAKQNyqwAAAHLJAAAAcvoCAAByeQAAAHJ5AAAAcnoAAAByWQIAALgOAABzCgAAAAABCAEOARIBCgF6IlBhcnNlRWxlbWVudEVuaGFuY2UuY2hlY2tSZWN1cnNpb25jAgAAAAAAAAAAAAAAAwAAAAMAAABDAAAAczYAAAB8AWQAZACFAhkAfABnARcAfQJ8AGoAZABrCXIofABqAKABfAKhAQEAfACgAmcAoQEBAGQAUwByiQAAAKkDcnYBAAByWwIAAHJZAgAAqQNyqwAAAHJaAgAAcvECAAByeQAAAHJ5AAAAcnoAAAByWwIAAL8OAABzCAAAAAABEgEKAQwBehxQYXJzZUVsZW1lbnRFbmhhbmNlLnZhbGlkYXRlYwEAAAAAAAAAAAAAAAEAAAAIAAAAAwAAAHNYAAAAehB0AHQBfACDAqACoQBXAFMABAB0A2sKciQBAAEAAQBZAG4CWAB8AGoEZABrCHJSfABqBWQAawlyUmQBfABqBmoHdAh8AGoFgwFmAhYAfABfBHwAagRTAHLwAgAAKQlyZAIAAHIgAAAAcrYAAABylwEAAHKkAQAAcnYBAABylAEAAHKbAAAAcogAAABytQAAAHJlAgAAcnkAAAByegAAAHK2AAAAxQ4AAHMOAAAAAAECARABDgEGAhQBGAF6G1BhcnNlRWxlbWVudEVuaGFuY2UuX19zdHJfXykBRikBVCkNcpsAAABynAAAAHKdAAAAcsMAAAByrQAAAHLhAQAAck8CAAByUgIAAHIaAgAAclkCAAByWwIAAHK2AAAAcoECAAByeQAAAHJ5AAAAcmUCAAByegAAAHIgAAAAgw4AAHMSAAAACAEEAw4SCgYIBwwMDAYIBwwGYwAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAHMqAAAAZQBaAWQAWgJkAVoDhwBmAWQCZAOECFoEZAdkBWQGhAFaBYcABABaBlMAKQhyEAAAAGH1AgAACiAgICBMb29rYWhlYWQgbWF0Y2hpbmcgb2YgdGhlIGdpdmVuIHBhcnNlIGV4cHJlc3Npb24uICBDe0ZvbGxvd2VkQnl9CiAgICBkb2VzIEl7bm90fSBhZHZhbmNlIHRoZSBwYXJzaW5nIHBvc2l0aW9uIHdpdGhpbiB0aGUgaW5wdXQgc3RyaW5nLCBpdCBvbmx5CiAgICB2ZXJpZmllcyB0aGF0IHRoZSBzcGVjaWZpZWQgcGFyc2UgZXhwcmVzc2lvbiBtYXRjaGVzIGF0IHRoZSBjdXJyZW50CiAgICBwb3NpdGlvbi4gIEN7Rm9sbG93ZWRCeX0gYWx3YXlzIHJldHVybnMgYSBudWxsIHRva2VuIGxpc3QuCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyB1c2UgRm9sbG93ZWRCeSB0byBtYXRjaCBhIGxhYmVsIG9ubHkgaWYgaXQgaXMgZm9sbG93ZWQgYnkgYSAnOicKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIAogICAgICAgIE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKCJzaGFwZTogU1FVQVJFIGNvbG9yOiBCTEFDSyBwb3NuOiB1cHBlciBsZWZ0IikucHByaW50KCkKICAgIHByaW50czo6CiAgICAgICAgW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsnY29sb3InLCAnQkxBQ0snXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXV0KICAgIGMCAAAAAAAAAAAAAAACAAAAAwAAAAMAAABzGgAAAHQAdAF8AIMCoAJ8AaEBAQBkAXwAXwNkAFMActUAAAApBHJkAgAAchAAAAByrQAAAHKqAQAAqQJyqwAAAHJ2AQAAcmUCAAByeQAAAHJ6AAAAcq0AAADhDgAAcwQAAAAAARABehNGb2xsb3dlZEJ5Ll9faW5pdF9fVGMEAAAAAAAAAAAAAAAEAAAABAAAAEMAAABzFgAAAHwAagCgAXwBfAKhAgEAfAJnAGYCUwByiQAAACkCcnYBAABy7QEAAHLgAQAAcnkAAAByeQAAAHJ6AAAAcuEBAADlDgAAcwQAAAAAAQ4BehRGb2xsb3dlZEJ5LnBhcnNlSW1wbCkBVHKFAgAAcnkAAAByeQAAAHJlAgAAcnoAAAByEAAAANAOAABzBgAAAAgBBBAMBGMAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABzMgAAAGUAWgFkAFoCZAFaA4cAZgFkAmQDhAhaBGQJZAVkBoQBWgVkB2QIhABaBocABABaB1MAKQpyGgAAAGGxAQAACiAgICBMb29rYWhlYWQgdG8gZGlzYWxsb3cgbWF0Y2hpbmcgd2l0aCB0aGUgZ2l2ZW4gcGFyc2UgZXhwcmVzc2lvbi4gIEN7Tm90QW55fQogICAgZG9lcyBJe25vdH0gYWR2YW5jZSB0aGUgcGFyc2luZyBwb3NpdGlvbiB3aXRoaW4gdGhlIGlucHV0IHN0cmluZywgaXQgb25seQogICAgdmVyaWZpZXMgdGhhdCB0aGUgc3BlY2lmaWVkIHBhcnNlIGV4cHJlc3Npb24gZG9lcyBJe25vdH0gbWF0Y2ggYXQgdGhlIGN1cnJlbnQKICAgIHBvc2l0aW9uLiAgQWxzbywgQ3tOb3RBbnl9IGRvZXMgSXtub3R9IHNraXAgb3ZlciBsZWFkaW5nIHdoaXRlc3BhY2UuIEN7Tm90QW55fQogICAgYWx3YXlzIHJldHVybnMgYSBudWxsIHRva2VuIGxpc3QuICBNYXkgYmUgY29uc3RydWN0ZWQgdXNpbmcgdGhlICd+JyBvcGVyYXRvci4KCiAgICBFeGFtcGxlOjoKICAgICAgICAKICAgIGMCAAAAAAAAAAAAAAACAAAAAwAAAAMAAABzMAAAAHQAdAF8AIMCoAJ8AaEBAQBkAXwAXwNkAnwAXwRkA3QFfABqBoMBFwB8AF8HZABTACkETkZUehZGb3VuZCB1bndhbnRlZCB0b2tlbiwgKQhyZAIAAHIaAAAAcq0AAABypwEAAHKqAQAAcogAAABydgEAAHKwAQAAciIDAAByZQIAAHJ5AAAAcnoAAAByrQAAAPUOAABzCAAAAAABEAIGAQYBeg9Ob3RBbnkuX19pbml0X19UYwQAAAAAAAAAAAAAAAQAAAAFAAAAQwAAAHMmAAAAfABqAKABfAF8AqECch50AnwBfAJ8AGoDfACDBIIBfAJnAGYCUwByiQAAACkEcnYBAABy7gEAAHIhAAAAcrABAABy4AEAAHJ5AAAAcnkAAAByegAAAHLhAQAA/A4AAHMGAAAAAAEOARABehBOb3RBbnkucGFyc2VJbXBsYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHM0AAAAdAB8AGQBgwJyEHwAagFTAHwAagJkAGsIci5kAnQDfABqBIMBFwBkAxcAfABfAnwAagJTACkETnLaAAAAegJ+e3L8AgAAqQVyDwEAAHLaAAAAcqQBAAByiAAAAHJ2AQAAcrUAAAByeQAAAHJ5AAAAcnoAAABytgAAAAEPAABzCgAAAAABCgEGAgoBFAJ6Dk5vdEFueS5fX3N0cl9fKQFUcroCAAByeQAAAHJ5AAAAcmUCAAByegAAAHIaAAAA6g4AAHMIAAAACAEECgwHCgVjAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAcygAAABlAFoBZABaAmQHhwBmAWQCZAOECVoDZAhkBWQGhAFaBIcABABaBVMAKQnaDl9NdWx0aXBsZU1hdGNoTmMDAAAAAAAAAAAAAAAEAAAAAwAAAAMAAABzRgAAAHQAdAF8AIMCoAJ8AaEBAQBkAXwAXwN8An0DdAR8A3QFgwJyLnQGoAd8A6EBfQN8A2QAawlyPHwDDwBuAmQAfABfCGQAUwBy1QAAACkJcmQCAAByJAMAAHKtAAAAcqYBAAByfQAAAHLoAAAAciYAAAByoAEAANoJbm90X2VuZGVyKQRyqwAAAHJ2AQAA2gZzdG9wT27aBWVuZGVycmUCAAByeQAAAHJ6AAAAcq0AAAALDwAAcwwAAAAAARABBgEEAQoBCgF6F19NdWx0aXBsZU1hdGNoLl9faW5pdF9fVGMEAAAAAAAAAAAAAAAMAAAACQAAAEMAAABzvgAAAHwAagBqAX0EfABqAn0FfABqA2QAawl9BnwGciR8AGoDagR9B3wGcjJ8B3wBfAKDAgEAfAR8AXwCfANkAWQCjQRcAn0CfQh6VnwAagUMAAwAfQl8BnJgfAd8AXwCgwIBAHwJcnB8BXwBfAKDAn0KbgR8An0KfAR8AXwKfAODA1wCfQJ9C3wLc5B8C6AGoQByUnwIfAs3AH0IcVJXAG4YBAB0B3QIZgJrCnK0AQABAAEAWQBuAlgAfAJ8CGYCUwCpA05GciACAAApCXJ2AQAAcsgBAABy2wEAAHIlAwAAcu0BAAByrAEAAHIaAQAAciEAAABy7AAAACkMcqsAAABydQEAAHKmAAAAcsIBAADaD3NlbGZfZXhwcl9wYXJzZdoUc2VsZl9za2lwX2lnbm9yYWJsZXPaC2NoZWNrX2VuZGVy2g10cnlfbm90X2VuZGVycugBAADaDmhhc0lnbm9yZUV4cHJzcuYBAADaCXRtcHRva2Vuc3J5AAAAcnkAAAByegAAAHLhAQAAEw8AAHMqAAAAAAEIAQYBCgEEAQgEBAEKARQBAgEKAgQBCgEEAQwCBAEQAQwBDgESAQYCehhfTXVsdGlwbGVNYXRjaC5wYXJzZUltcGwpAU4pAVQpBnKbAAAAcpwAAABynQAAAHKtAAAAcuEBAABygQIAAHJ5AAAAcnkAAAByZQIAAHJ6AAAAciQDAAAKDwAAcwQAAAAIAQ4IciQDAABjAAAAAAAAAAAAAAAAAAAAAAIAAABAAAAAcxgAAABlAFoBZABaAmQBWgNkAmQDhABaBGQEUwApBXIbAAAAYYMEAAAKICAgIFJlcGV0aXRpb24gb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGdpdmVuIGV4cHJlc3Npb24uCiAgICAKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggb25lIG9yIG1vcmUgdGltZXMKICAgICAtIHN0b3BPbiAtIChkZWZhdWx0PUN7Tm9uZX0pIC0gZXhwcmVzc2lvbiBmb3IgYSB0ZXJtaW5hdGluZyBzZW50aW5lbAogICAgICAgICAgKG9ubHkgcmVxdWlyZWQgaWYgdGhlIHNlbnRpbmVsIHdvdWxkIG9yZGluYXJpbHkgbWF0Y2ggdGhlIHJlcGV0aXRpb24gCiAgICAgICAgICBleHByZXNzaW9uKSAgICAgICAgICAKCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IEJMQUNLIgogICAgICAgIE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLnBwcmludCgpICAjIEZhaWwhIHJlYWQgJ2NvbG9yJyBhcyBkYXRhIGluc3RlYWQgb2YgbmV4dCBsYWJlbCAtPiBbWydzaGFwZScsICdTUVVBUkUgY29sb3InXV0KCiAgICAgICAgIyB1c2Ugc3RvcE9uIGF0dHJpYnV0ZSBmb3IgT25lT3JNb3JlIHRvIGF2b2lkIHJlYWRpbmcgbGFiZWwgc3RyaW5nIGFzIHBhcnQgb2YgdGhlIGRhdGEKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICBPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKSAjIEJldHRlciAtPiBbWydzaGFwZScsICdTUVVBUkUnXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXSwgWydjb2xvcicsICdCTEFDSyddXQogICAgICAgIAogICAgICAgICMgY291bGQgYWxzbyBiZSB3cml0dGVuIGFzCiAgICAgICAgKGF0dHJfZXhwciAqICgxLCkpLnBhcnNlU3RyaW5nKHRleHQpLnBwcmludCgpCiAgICBjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAczQAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAawhyLmQCdAN8AGoEgwEXAGQDFwB8AF8CfABqAlMAKQROctoAAABy+wIAAHoEfS4uLnIjAwAAcrUAAAByeQAAAHJ5AAAAcnoAAABytgAAAEoPAABzCgAAAAABCgEGAgoBFAJ6EU9uZU9yTW9yZS5fX3N0cl9fTikFcpsAAABynAAAAHKdAAAAcsMAAABytgAAAHJ5AAAAcnkAAAByeQAAAHJ6AAAAchsAAAAwDwAAcwQAAAAIAQQZYwAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAHM4AAAAZQBaAWQAWgJkAVoDZAqHAGYBZANkBIQJWgRkC4cAZgFkBmQHhAlaBWQIZAmEAFoGhwAEAFoHUwApDHI0AAAAYXcBAAAKICAgIE9wdGlvbmFsIHJlcGV0aXRpb24gb2YgemVybyBvciBtb3JlIG9mIHRoZSBnaXZlbiBleHByZXNzaW9uLgogICAgCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gZXhwciAtIGV4cHJlc3Npb24gdGhhdCBtdXN0IG1hdGNoIHplcm8gb3IgbW9yZSB0aW1lcwogICAgIC0gc3RvcE9uIC0gKGRlZmF1bHQ9Q3tOb25lfSkgLSBleHByZXNzaW9uIGZvciBhIHRlcm1pbmF0aW5nIHNlbnRpbmVsCiAgICAgICAgICAob25seSByZXF1aXJlZCBpZiB0aGUgc2VudGluZWwgd291bGQgb3JkaW5hcmlseSBtYXRjaCB0aGUgcmVwZXRpdGlvbiAKICAgICAgICAgIGV4cHJlc3Npb24pICAgICAgICAgIAoKICAgIEV4YW1wbGU6IHNpbWlsYXIgdG8gTHtPbmVPck1vcmV9CiAgICBOYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHMeAAAAdAB0AXwAgwJqAnwBfAJkAY0CAQBkAnwAXwNkAFMAKQNOKQFyJgMAAFQpBHJkAgAAcjQAAAByrQAAAHKqAQAAKQNyqwAAAHJ2AQAAciYDAAByZQIAAHJ5AAAAcnoAAAByrQAAAF8PAABzBAAAAAABFAF6E1plcm9Pck1vcmUuX19pbml0X19UYwQAAAAAAAAAAAAAAAQAAAAJAAAAAwAAAHM8AAAAehZ0AHQBfACDAqACfAF8AnwDoQNXAFMABAB0A3QEZgJrCnI2AQABAAEAfAJnAGYCBgBZAFMAWABkAFMAcokAAAApBXJkAgAAcjQAAABy4QEAAHIhAAAAcuwAAABy4AEAAHJlAgAAcnkAAAByegAAAHLhAQAAYw8AAHMIAAAAAAECARYBEgF6FFplcm9Pck1vcmUucGFyc2VJbXBsYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHM0AAAAdAB8AGQBgwJyEHwAagFTAHwAagJkAGsIci5kAnQDfABqBIMBFwBkAxcAfABfAnwAagJTACkETnLaAAAAcjkBAAD6BF0uLi5yIwMAAHK1AAAAcnkAAAByeQAAAHJ6AAAAcrYAAABpDwAAcwoAAAAAAQoBBgIKARQCehJaZXJvT3JNb3JlLl9fc3RyX18pAU4pAVRyugIAAHJ5AAAAcnkAAAByZQIAAHJ6AAAAcjQAAABTDwAAcwgAAAAIAQQLDgQOBmMAAAAAAAAAAAAAAAAAAAAAAgAAAEAAAABzIAAAAGUAWgFkAFoCZAFkAoQAWgNlA1oEZANkBIQAWgVkBVMAKQbaCl9OdWxsVG9rZW5jAQAAAAAAAAAAAAAAAQAAAAEAAABDAAAAcwQAAABkAVMAcgACAAByeQAAAHK1AAAAcnkAAAByeQAAAHJ6AAAAcggBAABzDwAAcwIAAAAAAXoTX051bGxUb2tlbi5fX2Jvb2xfX2MBAAAAAAAAAAAAAAABAAAAAQAAAEMAAABzBAAAAGQBUwBypQAAAHJ5AAAAcrUAAAByeQAAAHJ5AAAAcnoAAABytgAAAHYPAABzAgAAAAABehJfTnVsbFRva2VuLl9fc3RyX19OKQZymwAAAHKcAAAAcp0AAAByCAEAAHJtAQAAcrYAAAByeQAAAHJ5AAAAcnkAAAByegAAAHIwAwAAcg8AAHMGAAAACAEIAgQBcjADAABjAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAczYAAABlAFoBZABaAmQBWgNlBGYBhwBmAWQCZAOECVoFZAlkBWQGhAFaBmQHZAiEAFoHhwAEAFoIUwApCnIdAAAAYWEDAAAKICAgIE9wdGlvbmFsIG1hdGNoaW5nIG9mIHRoZSBnaXZlbiBleHByZXNzaW9uLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggemVybyBvciBtb3JlIHRpbWVzCiAgICAgLSBkZWZhdWx0IChvcHRpb25hbCkgLSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgb3B0aW9uYWwgZXhwcmVzc2lvbiBpcyBub3QgZm91bmQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgIyBVUyBwb3N0YWwgY29kZSBjYW4gYmUgYSA1LWRpZ2l0IHppcCwgcGx1cyBvcHRpb25hbCA0LWRpZ2l0IHF1YWxpZmllcgogICAgICAgIHppcCA9IENvbWJpbmUoV29yZChudW1zLCBleGFjdD01KSArIE9wdGlvbmFsKCctJyArIFdvcmQobnVtcywgZXhhY3Q9NCkpKQogICAgICAgIHppcC5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgICAgICAxMjM0NQogICAgICAgICAgICAKICAgICAgICAgICAgIyBaSVArNCBmb3JtCiAgICAgICAgICAgIDEyMTAxLTAwMDEKICAgICAgICAgICAgCiAgICAgICAgICAgICMgaW52YWxpZCBaSVAKICAgICAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICcnJykKICAgIHByaW50czo6CiAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgIDEyMzQ1CiAgICAgICAgWycxMjM0NSddCgogICAgICAgICMgWklQKzQgZm9ybQogICAgICAgIDEyMTAxLTAwMDEKICAgICAgICBbJzEyMTAxLTAwMDEnXQoKICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICBeCiAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNSksIChsaW5lOjEsIGNvbDo2KQogICAgYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHMuAAAAdAB0AXwAgwJqAnwBZAFkAo0CAQB8AGoDagR8AF8EfAJ8AF8FZAN8AF8GZABTACkETkZygwIAAFQpB3JkAgAAch0AAAByrQAAAHJ2AQAAcqYBAAByIQEAAHKqAQAAKQNyqwAAAHJ2AQAAchsBAAByZQIAAHJ5AAAAcnoAAAByrQAAAJ0PAABzCAAAAAABFAEKAQYBehFPcHRpb25hbC5fX2luaXRfX1RjBAAAAAAAAAAAAAAABQAAAAkAAABDAAAAc3oAAAB6HHwAagBqAXwBfAJ8A2QBZAKNBFwCfQJ9BFcAblQEAHQCdANmAmsKcnABAAEAAQB8AGoEdAVrCXJofABqAGoGcl50B3wAagRnAYMBfQR8AGoEfAR8AGoAagY8AHFsfABqBGcBfQRuBGcAfQRZAG4CWAB8AnwEZgJTAHIoAwAAKQhydgEAAHLIAQAAciEAAABy7AAAAHIhAQAA2hNfb3B0aW9uYWxOb3RNYXRjaGVkcqUBAAByJAAAACkFcqsAAABydQEAAHKmAAAAcsIBAABy6AEAAHJ5AAAAcnkAAAByegAAAHLhAQAAow8AAHMUAAAAAAECARwBEgEKAQgBDAEQAgoCCgF6Ek9wdGlvbmFsLnBhcnNlSW1wbGMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzNAAAAHQAfABkAYMCchB8AGoBUwB8AGoCZABrCHIuZAJ0A3wAagSDARcAZAMXAHwAXwJ8AGoCUwApBE5y2gAAAHI5AQAAcjwBAAByIwMAAHK1AAAAcnkAAAByeQAAAHJ6AAAAcrYAAACxDwAAcwoAAAAAAQoBBgIKARQCehBPcHRpb25hbC5fX3N0cl9fKQFUKQlymwAAAHKcAAAAcp0AAABywwAAAHIxAwAAcq0AAABy4QEAAHK2AAAAcoECAAByeQAAAHJ5AAAAcmUCAAByegAAAHIdAAAAeg8AAHMIAAAACAEEIhAGCg5jAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAcywAAABlAFoBZABaAmQBWgNkCYcAZgFkBGQFhAlaBGQKZAdkCIQBWgWHAAQAWgZTACkLcioAAABh/wkAAAogICAgVG9rZW4gZm9yIHNraXBwaW5nIG92ZXIgYWxsIHVuZGVmaW5lZCB0ZXh0IHVudGlsIHRoZSBtYXRjaGVkIGV4cHJlc3Npb24gaXMgZm91bmQuCgogICAgUGFyYW1ldGVyczoKICAgICAtIGV4cHIgLSB0YXJnZXQgZXhwcmVzc2lvbiBtYXJraW5nIHRoZSBlbmQgb2YgdGhlIGRhdGEgdG8gYmUgc2tpcHBlZAogICAgIC0gaW5jbHVkZSAtIChkZWZhdWx0PUN7RmFsc2V9KSBpZiBUcnVlLCB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gaXMgYWxzbyBwYXJzZWQgCiAgICAgICAgICAodGhlIHNraXBwZWQgdGV4dCBhbmQgdGFyZ2V0IGV4cHJlc3Npb24gYXJlIHJldHVybmVkIGFzIGEgMi1lbGVtZW50IGxpc3QpLgogICAgIC0gaWdub3JlIC0gKGRlZmF1bHQ9Q3tOb25lfSkgdXNlZCB0byBkZWZpbmUgZ3JhbW1hcnMgKHR5cGljYWxseSBxdW90ZWQgc3RyaW5ncyBhbmQgCiAgICAgICAgICBjb21tZW50cykgdGhhdCBtaWdodCBjb250YWluIGZhbHNlIG1hdGNoZXMgdG8gdGhlIHRhcmdldCBleHByZXNzaW9uCiAgICAgLSBmYWlsT24gLSAoZGVmYXVsdD1De05vbmV9KSBkZWZpbmUgZXhwcmVzc2lvbnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG8gYmUgCiAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgc2tpcHBlZCB0ZXN0OyBpZiBmb3VuZCBiZWZvcmUgdGhlIHRhcmdldCBleHByZXNzaW9uIGlzIGZvdW5kLCAKICAgICAgICAgIHRoZSBTa2lwVG8gaXMgbm90IGEgbWF0Y2gKCiAgICBFeGFtcGxlOjoKICAgICAgICByZXBvcnQgPSAnJycKICAgICAgICAgICAgT3V0c3RhbmRpbmcgSXNzdWVzIFJlcG9ydCAtIDEgSmFuIDIwMDAKCiAgICAgICAgICAgICAgICMgfCBTZXZlcml0eSB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIERheXMgT3BlbgogICAgICAgICAgICAtLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KICAgICAgICAgICAgIDEwMSB8IENyaXRpY2FsIHwgSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaCAgICAgICAgICAgICAgICAgfCAgICAgICAgICA2CiAgICAgICAgICAgICAgOTQgfCBDb3NtZXRpYyB8IFNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKSAgICAgICAgIHwgICAgICAgICAxNAogICAgICAgICAgICAgIDc5IHwgTWlub3IgICAgfCBTeXN0ZW0gc2xvdyB3aGVuIHJ1bm5pbmcgdG9vIG1hbnkgcmVwb3J0cyB8ICAgICAgICAgNDcKICAgICAgICAgICAgJycnCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBTRVAgPSBTdXBwcmVzcygnfCcpCiAgICAgICAgIyB1c2UgU2tpcFRvIHRvIHNpbXBseSBtYXRjaCBldmVyeXRoaW5nIHVwIHVudGlsIHRoZSBuZXh0IFNFUAogICAgICAgICMgLSBpZ25vcmUgcXVvdGVkIHN0cmluZ3MsIHNvIHRoYXQgYSAnfCcgY2hhcmFjdGVyIGluc2lkZSBhIHF1b3RlZCBzdHJpbmcgZG9lcyBub3QgbWF0Y2gKICAgICAgICAjIC0gcGFyc2UgYWN0aW9uIHdpbGwgY2FsbCB0b2tlbi5zdHJpcCgpIGZvciBlYWNoIG1hdGNoZWQgdG9rZW4sIGkuZS4sIHRoZSBkZXNjcmlwdGlvbiBib2R5CiAgICAgICAgc3RyaW5nX2RhdGEgPSBTa2lwVG8oU0VQLCBpZ25vcmU9cXVvdGVkU3RyaW5nKQogICAgICAgIHN0cmluZ19kYXRhLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci5zdHJpcCkpCiAgICAgICAgdGlja2V0X2V4cHIgPSAoaW50ZWdlcigiaXNzdWVfbnVtIikgKyBTRVAgCiAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZ19kYXRhKCJzZXYiKSArIFNFUCAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoImRlc2MiKSArIFNFUCAKICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlcigiZGF5c19vcGVuIikpCiAgICAgICAgCiAgICAgICAgZm9yIHRrdCBpbiB0aWNrZXRfZXhwci5zZWFyY2hTdHJpbmcocmVwb3J0KToKICAgICAgICAgICAgcHJpbnQgdGt0LmR1bXAoKQogICAgcHJpbnRzOjoKICAgICAgICBbJzEwMScsICdDcml0aWNhbCcsICdJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoJywgJzYnXQogICAgICAgIC0gZGF5c19vcGVuOiA2CiAgICAgICAgLSBkZXNjOiBJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoCiAgICAgICAgLSBpc3N1ZV9udW06IDEwMQogICAgICAgIC0gc2V2OiBDcml0aWNhbAogICAgICAgIFsnOTQnLCAnQ29zbWV0aWMnLCAiU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpIiwgJzE0J10KICAgICAgICAtIGRheXNfb3BlbjogMTQKICAgICAgICAtIGRlc2M6IFNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4n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c3QgY29sdW1uIGNhbiBiZSB1c2VkIGFzIGEgaXRlbSBrZXkuCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGF0YV93b3JkID0gV29yZChhbHBoYXMpCiAgICAgICAgbGFiZWwgPSBkYXRhX3dvcmQgKyBGb2xsb3dlZEJ5KCc6JykKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBsaWdodCBibHVlIHRleHR1cmU6IGJ1cmxhcCIKICAgICAgICBhdHRyX2V4cHIgPSAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCiAgICAgICAgCiAgICAgICAgIyBwcmludCBhdHRyaWJ1dGVzIGFzIHBsYWluIGdyb3VwcwogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKICAgICAgICAKICAgICAgICAjIGluc3RlYWQgb2YgT25lT3JNb3JlKGV4cHIpLCBwYXJzZSB1c2luZyBEaWN0KE9uZU9yTW9yZShHcm91cChleHByKSkpIC0gRGljdCB3aWxsIGF1dG8tYXNzaWduIG5hbWVzCiAgICAgICAgcmVzdWx0ID0gRGljdChPbmVPck1vcmUoR3JvdXAoYXR0cl9leHByKSkpLnBhcnNlU3RyaW5nKHRleHQpCiAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKICAgICAgICAKICAgICAgICAjIGFjY2VzcyBuYW1lZCBmaWVsZHMgYXMgZGljdCBlbnRyaWVzLCBvciBvdXRwdXQgYXMgZGljdAogICAgICAgIHByaW50KHJlc3VsdFsnc2hhcGUnXSkgICAgICAgIAogICAgICAgIHByaW50KHJlc3VsdC5hc0RpY3QoKSkKICAgIHByaW50czo6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AHKcAAAAcp0AAABywwAAAHKtAAAAckwCAAByTAMAAHJ5AAAAcnkAAAByeQAAAHJ6AAAAchwAAAAmEQAAcwgAAAAIAQQDCAMIBmMBAAAAAAAAAAAAAAACAAAACAAAAAMAAABzOgAAAHQAiACDAYkAhwBmAWQBZAKECH0BegyIAGoBfAFfAVcAbhQEAHQCawpyNAEAAQABAFkAbgJYAHwBUwApA2F0AwAACiAgICBEZWNvcmF0b3IgZm9yIGRlYnVnZ2luZyBwYXJzZSBhY3Rpb25zLiAKICAgIAogICAgV2hlbiB0aGUgcGFyc2UgYWN0aW9uIGlzIGNhbGxlZCwgdGhpcyBkZWNvcmF0b3Igd2lsbCBwcmludCBDeyI+PiBlbnRlcmluZyBJe21ldGhvZC1uYW1lfShsaW5lOkl7Y3VycmVudF9zb3VyY2VfbGluZX0sIEl7cGFyc2VfbG9jYXRpb259LCBJe21hdGNoZWRfdG9rZW5zfSkiLn0KICAgIFdoZW4gdGhlIHBhcnNlIGFjdGlvbiBjb21wbGV0ZXMsIHRoZSBkZWNvcmF0b3Igd2lsbCBwcmludCBDeyI8PCJ9IGZvbGxvd2VkIGJ5IHRoZSByZXR1cm5lZCB2YWx1ZSwgb3IgYW55IGV4Y2VwdGlvbiB0aGF0IHRoZSBwYXJzZSBhY3Rpb24gcmFpc2VkLgoKICAgIEV4YW1wbGU6OgogICAgICAgIHdkID0gV29yZChhbHBoYXMpCgogICAgICAgIEB0cmFjZVBhcnNlQWN0aW9uCiAgICAgICAgZGVmIHJlbW92ZV9kdXBsaWNhdGVfY2hhcnModG9rZW5zKToKICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4oc29ydGVkKHNldCgnJy5qb2luKHRva2VucykpKSkKCiAgICAgICAgd2RzID0gT25lT3JNb3JlKHdkKS5zZXRQYXJzZUFjdGlvbihyZW1vdmVfZHVwbGljYXRlX2NoYXJzKQogICAgICAgIHByaW50KHdkcy5wYXJzZVN0cmluZygic2xrZGpzIHNsZCBzbGRkIHNkbGYgc2RsamYiKSkKICAgIHByaW50czo6CiAgICAgICAgPj5lbnRlcmluZyByZW1vdmVfZHVwbGljYXRlX2NoYXJzKGxpbmU6ICdzbGtkanMgc2xk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B4gBgwEXAGQKFwChAVMAKQthOgMAAAogICAgSGVscGVyIHRvIGRlZmluZSBhIGNvdW50ZWQgbGlzdCBvZiBleHByZXNzaW9ucy4KICAgIFRoaXMgaGVscGVyIGRlZmluZXMgYSBwYXR0ZXJuIG9mIHRoZSBmb3JtOjoKICAgICAgICBpbnRlZ2VyIGV4cHIgZXhwciBleHByLi4uCiAgICB3aGVyZSB0aGUgbGVhZGluZyBpbnRlZ2VyIHRlbGxzIGhvdyBtYW55IGV4cHIgZXhwcmVzc2lvbnMgZm9sbG93LgogICAgVGhlIG1hdGNoZWQgdG9rZW5zIHJldHVybnMgdGhlIGFycmF5IG9mIGV4cHIgdG9rZW5zIGFzIGEgbGlzdCAtIHRoZSBsZWFkaW5nIGNvdW50IHRva2VuIGlzIHN1cHByZXNzZWQuCiAgICAKICAgIElmIEN7aW50RXhwcn0gaXMgc3BlY2lmaWVkLCBpdCBzaG91bGQgYmUgYSBweXBhcnNpbmcgZXhwcmVzc2lvbiB0aGF0IHByb2R1Y2VzIGFuIGludGVnZXIgdmFsdWUuCgogICAgRXhhbXBsZTo6CiAgICAgICAgY291bnRlZEFycmF5KFdvcmQoYWxwaGFzKSkucGFyc2VTdHJpbmcoJzIgYWIgY2QgZWYnKSAgIyAtPiBbJ2FiJywgJ2NkJ10KCiAgICAgICAgIyBpbiB0aGlzIHBhcnNlciwgdGhlIGxlYWRpbmcgaW50ZWdlciB2YWx1ZSBpcyBnaXZlbiBpbiBiaW5hcnksCiAgICAgICAgIyAnMTAnIGluZGljYXRpbmcgdGhhdCAyIHZhbHVlcyBhcmUgaW4gdGhlIGFycmF5CiAgICAgICAgYmluYXJ5Q29uc3RhbnQgPSBXb3JkKCcwMScpLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0OiBpbnQodFswXSwgMikpCiAgICAgICAgY291bnRlZEFycmF5KFdvcmQoYWxwaGFzKSwgaW50RXhwcj1iaW5hcnlDb25zdGFudCkucGFyc2VTdHJpbmcoJzEwIGFiIGNkIGVmJykgICMgLT4gWydhYicsICdjZCddCiAgICBjAwAAAAAAAAAAAAAABAAAAAUAAAATAAAAcy4AAAB8AmQBGQB9A4gAfANyIHQAdAGIAWcB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ZSBzdXBwcmVzc2VkLCB0aGVyZWJ5IGxlYXZpbmcgdGhlIHNpZ25pZmljYW50IGtleSB0ZXh0LiAgVGhlIHZhbHVlCiAgICBwYXR0ZXJuIGNhbiBpbmNsdWRlIG5hbWVkIHJlc3VsdHMsIHNvIHRoYXQgdGhlIEN7RGljdH0gcmVzdWx0cyBjYW4gaW5jbHVkZSBuYW1lZCB0b2tlbgogICAgZmllbGRzLgoKICAgIEV4YW1wbGU6OgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBsaWdodCBibHVlIHRleHR1cmU6IGJ1cmxhcCIKICAgICAgICBhdHRyX2V4cHIgPSAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCiAgICAgICAgcHJpbnQoT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkuZHVtcCgpKQogICAgICAgIAogICAgICAgIGF0dHJfbGFiZWwgPSBsYWJlbAogICAgICAgIGF0dHJfdmFsdWUgPSBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikKCiAgICAgICAgIyBzaW1pbGFyIHRvIERpY3QsIGJ1dCBzaW1wbGVyIGNhbGwgZm9ybWF0CiAgICAgICAgcmVzdWx0ID0gZGljdE9mKGF0dHJfbGFiZWwsIGF0dHJfdmFsdWUpLnBhcnNlU3RyaW5nKHRleHQpCiAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKICAgICAgICBwcmludChyZXN1bHRbJ3NoYXBlJ10pCiAgICAgICAgcHJpbnQocmVzdWx0LnNoYXBlKSAgIyBvYmplY3QgYXR0cmlidXRlIGFjY2VzcyB3b3JrcyB0b28KICAgICAgICBwcmludChyZXN1bHQuYXNEaWN0KCkpCiAgICBwcmludHM6OgogICAgICAgIFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIg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Z3MgaW4gZWl0aGVyIHVwcGVyIG9yIGxvd2VyIGNhc2UsIGF0dHJpYnV0ZXMgd2l0aCBuYW1lc3BhY2VzIGFuZCB3aXRoIHF1b3RlZCBvciB1bnF1b3RlZCB2YWx1ZXMuCgogICAgRXhhbXBsZTo6CiAgICAgICAgdGV4dCA9ICc8dGQ+TW9yZSBpbmZvIGF0IHRoZSA8YSBocmVmPSJodHRwOi8vcHlwYXJzaW5nLndpa2lzcGFjZXMuY29tIj5weXBhcnNpbmc8L2E+IHdpa2kgcGFnZTwvdGQ+JwogICAgICAgICMgbWFrZUhUTUxUYWdzIHJldHVybnMgcHlwYXJzaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIGFzIGEgMi10dXBsZQogICAgICAgIGEsYV9lbmQgPSBtYWtlSFRNTFRhZ3MoIkEiKQogICAgICAgIGxpbmtfZXhwciA9IGEgKyBTa2lwVG8oYV9lbmQpKCJsaW5rX3RleHQiKSArIGFfZW5kCiAgICAgICAgCiAgICAgICAgZm9yIGxpbmsgaW4gbGlua19leHByLnNlYXJjaFN0cmluZyh0ZXh0KToKICAgICAgICAgICAgIyBhdHRyaWJ1dGVzIGluIHRoZSA8QT4gdGFnIChsaWtlICJocmVmIiBzaG93biBoZXJlKSBhcmUgYWxzbyBhY2Nlc3NpYmxlIGFzIG5hbWVkIHJlc3VsdHMKICAgICAgICAgICAgcHJpbnQobGluay5saW5rX3RleHQsICctPicsIGxpbmsuaHJlZikKICAgIHByaW50czo6CiAgICAgICAgcHlwYXJzaW5nIC0+IGh0dHA6Ly9weXBhcnNpbmcud2lraXNwYWNlcy5jb20KICAgIEapAXKpAwAAqQFyoQMAAHJ5AAAAcnkAAAByegAAAHJNAAAAKBMAAHMCAAAAABFjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcwoAAAB0AHwAZAGDAlMAKQJ6ugogICAgSGVscGVyIHRvIGNvbnN0cnVjdCBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZyBleHByZXNzaW9ucyBmb3IgWE1MLCBnaXZlbiBhIHRhZyBuYW1lLiBNYXRjaGVzCiAgICB0YWdzIG9ubHkgaW4gdGhlIGdpdmVuIHVwcGVyL2xvd2VyIGNhc2UuCgogICAgRXhhbXBsZTogc2ltaWxhciB0byBMe21ha2VIVE1MVGFnc30KICAgIFRyqgMAAHKrAwAAcnkAAAByeQAAAHJ6AAAAck4AAAA7EwAAcwIAAAAAB2MAAAAAAAAAAAAAAAADAAAAAwAAAA8AAABzOAAAAHwAchJ8AGQBZAGFAhkAiQBuCHwBoAChAIkAZAJkA4QAiABEAIMBiQCHAGYBZARkBYQIfQJ8AlMAKQZhPAgAAAogICAgSGVscGVyIHRvIGNyZWF0ZSBhIHZhbGlkYXRpbmcgcGFyc2UgYWN0aW9uIHRvIGJlIHVzZWQgd2l0aCBzdGFydCB0YWdzIGNyZWF0ZWQKICAgIHdpdGggQ3tMe21ha2VYTUxUYWdzfX0gb3IgQ3tMe21ha2VIVE1MVGFnc319LiBVc2UgQ3t3aXRoQXR0cmlidXRlfSB0byBxdWFsaWZ5IGEgc3RhcnRpbmcgdGFnCiAgICB3aXRoIGEgcmVxdWlyZWQgYXR0cmlidXRlIHZhbHVlLCB0byBhdm9pZCBmYWxzZSBtYXRjaGVzIG9uIGNvbW1vbiB0YWdzIHN1Y2ggYXMKICAgIEN7PFREPn0gb3IgQ3s8RElWPn0uCgogICAgQ2FsbCBDe3dpdGhBdHRyaWJ1dGV9IHdpdGggYSBzZXJpZXMgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuIFNwZWNpZnkgdGhlIGxpc3QKICAgIG9mIGZpbHRlciBhdHRyaWJ1dGVzIG5hbWVzIGFuZCB2YWx1ZXMgYXM6CiAgICAgLSBrZXl3b3JkIGFyZ3VtZW50cywgYXMgaW4gQ3soYWxpZ249InJpZ2h0Iil9LCBvcgogICAgIC0gYXMgYW4gZXhwbGljaXQgZGljdCB3aXRoIEN7Kip9IG9wZXJhdG9yLCB3aGVuIGFuIGF0dHJpYnV0ZSBuYW1lIGlzIGFsc28gYSBQeXRob24KICAgICAgICAgIHJlc2VydmVkIHdvcmQsIGFzIGluIEN7Kip7ImNsYXNzIjoiQ3VzdG9tZXIiLCAiYWxpZ24iOiJyaWdodCJ9fQogICAgIC0gYSBsaXN0IG9mIG5hbWUtdmFsdWUgdHVwbGVzLCBhcyBpbiAoICgibnMxOmNsYXNzIiwgIkN1c3RvbWVyIiksICgibnMyOmFsaWduIiwicmlnaHQiKSApCiAgICBGb3IgYXR0cmlidXRlIG5hbWVzIHdpdGggYSBuYW1lc3BhY2UgcHJlZml4LCB5b3UgbXVzdCB1c2UgdGhlIHNlY29uZCBmb3JtLiAgQXR0cmlidXRlCiAgICBuYW1lcyBhcmUgbWF0Y2hlZCBpbnNlbnNpdGl2ZSB0byB1cHBlci9sb3dlciBjYXNlLgogICAgICAgCiAgICBJZiBqdXN0IHRlc3RpbmcgZm9yIEN7Y2xhc3N9ICh3aXRoIG9yIHdpdGhvdXQgYSBuYW1lc3BhY2UpLCB1c2UgQ3tMe3dpdGhDbGFzc319LgoKICAgIFRvIHZlcmlmeSB0aGF0IHRoZSBhdHRyaWJ1dGUgZXhpc3RzLCBidXQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgdmFsdWUsIHBhc3MKICAgIEN7d2l0aEF0dHJpYnV0ZS5BTllfVkFMVUV9IGFzIHRoZSB2YWx1ZS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBodG1sID0gJycnCiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIFNvbWUgdGV4dAogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyaWQiPjEgNCAwIDEgMDwvZGl2PgogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyYXBoIj4xLDMgMiwzIDEsMTwvZGl2PgogICAgICAgICAgICA8ZGl2PnRoaXMgaGFzIG5vIHR5cGU8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAnJycKICAgICAgICBkaXYsZGl2X2VuZCA9IG1ha2VIVE1MVGFncygiZGl2IikKCiAgICAgICAgIyBvbmx5IG1hdGNoIGRpdiB0YWcgaGF2aW5nIGEgdHlwZSBhdHRyaWJ1dGUgd2l0aCB2YWx1ZSAiZ3JpZCIKICAgICAgICBkaXZfZ3JpZCA9IGRpdigpLnNldFBhcnNlQWN0aW9uKHdpdGhBdHRyaWJ1dGUodHlwZT0iZ3JpZCIpKQogICAgICAgIGdyaWRfZXhwciA9IGRpdl9ncmlkICsgU2tpcFRvKGRpdiB8IGRpdl9lbmQpKCJib2R5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BXQJfAh8DxcAgwEXAIMBFwB9EG4cdAd8BXwPFwCDAXQIfAV0CXwPgwEXAIMBFwB9EG5EfAlkBGsCkAJyOHQHfAV8DRcAfA8XAHwOFwB8DxcAgwF0CHwFfA0XAHwPFwB8DhcAfA8XAIMBFwB9EG4IdANkCoMBggFuCHQDZAuDAYIBfAuQAnJ2dAt8C3QOdA9mAoMCkAJybHwQahB8C44AAQBuCnwQoBB8C6EBAQB8D3wQoAR8DKEBfAVCAEsAfQ98D30FcR58BHwFSwB9BHwEUwApDGFECgAACiAgICBIZWxwZXIgbWV0aG9kIGZvciBjb25zdHJ1Y3RpbmcgZ3JhbW1hcnMgb2YgZXhwcmVzc2lvbnMgbWFkZSB1cCBvZgogICAgb3BlcmF0b3JzIHdvcmtpbmcgaW4gYSBwcmVjZWRlbmNlIGhpZXJhcmNoeS4gIE9wZXJhdG9ycyBtYXkgYmUgdW5hcnkgb3IKICAgIGJpbmFyeSwgbGVmdC0gb3IgcmlnaHQtYXNzb2NpYXRpdmUuICBQYXJzZSBhY3Rpb25zIGNhbiBhbHNvIGJlIGF0dGFjaGVkCiAgICB0byBvcGVyYXRvciBleHByZXNzaW9ucy4gVGhlIGdlbmVyYXRlZCBwYXJzZXIgd2lsbCBhbHNvIHJlY29nbml6ZSB0aGUgdXNlIAogICAgb2YgcGFyZW50aGVzZXMgdG8gb3ZlcnJpZGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMgKHNlZSBleGFtcGxlIGJlbG93KS4KICAgIAogICAgTm90ZTogaWYgeW91IGRlZmluZSBhIGRlZXAgb3BlcmF0b3IgbGlzdCwgeW91IG1heSBzZWUgcGVyZm9ybWFuY2UgaXNzdWVzCiAgICB3aGVuIHVzaW5nIGluZml4Tm90YXRpb24uIFNlZSBMe1BhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdH0gZm9yIGEKICAgIG1lY2hhbmlzbSB0byBwb3RlbnRpYWxseSBpbXByb3ZlIHlvdXIgcGFyc2VyIHBlcmZvcm1hbmNlLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBiYXNlRXhwciAtIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBtb3N0IGJhc2ljIGVsZW1lbnQgZm9yIHRoZSBuZXN0ZWQKICAgICAtIG9wTGlzdCAtIGxpc3Qgb2YgdHVwbGVzLCBvbmUgZm9yIGVhY2ggb3BlcmF0b3IgcHJlY2VkZW5jZSBsZXZlbCBpbiB0aGUKICAgICAgZXhwcmVzc2lvbiBncmFtbWFyOyBlYWNoIHR1cGxlIGlzIG9mIHRoZSBmb3JtCiAgICAgIChvcEV4cHIsIG51bVRlcm1zLCByaWdodExlZnRBc3NvYywgcGFyc2VBY3Rpb24pLCB3aGVyZToKICAgICAgIC0gb3BFeHByIGlzIHRoZSBweXBhcnNpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9wZXJhdG9yOwogICAgICAgICAgbWF5IGFsc28gYmUgYSBzdHJpbmcsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgTGl0ZXJhbDsKICAgICAgICAgIGlmIG51bVRlcm1zIGlzIDMsIG9wRXhwciBpcyBhIHR1cGxlIG9mIHR3byBleHByZXNzaW9ucywgZm9yIHRoZQogICAgICAgICAgdHdvIG9wZXJhdG9ycyBzZXBhcmF0aW5nIHRoZSAzIHRlcm1zCiAgICAgICAtIG51bVRlcm1zIGlzIHRoZSBudW1iZXIgb2YgdGVybXMgZm9yIHRoaXMgb3BlcmF0b3IgKG11c3QKICAgICAgICAgIGJlIDEsIDIsIG9yIDMpCiAgICAgICAtIHJpZ2h0TGVmdEFzc29jIGlzIHRoZSBpbmRpY2F0b3Igd2hldGhlciB0aGUgb3BlcmF0b3IgaXMKICAgICAgICAgIHJpZ2h0IG9yIGxlZnQgYXNzb2NpYXRpdmUsIHVzaW5nIHRoZSBweXBhcnNpbmctZGVmaW5lZAogICAgICAgICAgY29uc3RhbnRzIEN7b3BBc3NvYy5SSUdIVH0gYW5kIEN7b3BBc3NvYy5MRUZUfS4KICAgICAgIC0gcGFyc2VBY3Rpb24gaXMgdGhlIHBhcnNlIGFjdGlvbiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgIGV4cHJlc3Npb25zIG1hdGNoaW5nIHRoaXMgb3BlcmF0b3IgZXhwcmVzc2lvbiAodGhlCiAgICAgICAgICBwYXJzZSBhY3Rpb24gdHVwbGUgbWVtYmVyIG1heSBiZSBvbWl0dGVkKTsgaWYgdGhlIHBhcnNlIGFjdGlvbgogICAgICAgICAgaXMgcGFzc2VkIGEgdHVwbGUgb3IgbGlzdCBvZiBmdW5jdGlvbnMsIHRoaXMgaXMgZXF1aXZhbGVudCB0bwogICAgICAgICAgY2FsbGluZyBDe3NldFBhcnNlQWN0aW9uKCpmbil9IChMe1BhcnNlckVsZW1lbnQuc2V0UGFyc2VBY3Rpb259KQogICAgIC0gbHBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIGxlZnQtcGFyZW50aGVzZXMgKGRlZmF1bHQ9Q3tTdXBwcmVzcygnKCcpfSkKICAgICAtIHJwYXIgLSBleHByZXNzaW9uIGZvciBtYXRjaGluZyByaWdodC1wYXJlbnRoZXNlcyAoZGVmYXVsdD1De1N1cHByZXNzKCcpJyl9KQoKICAgIEV4YW1wbGU6OgogICAgICAgICMgc2ltcGxlIGV4YW1wbGUgb2YgZm91ci1mdW5jdGlvbiBhcml0aG1ldGljIHdpdGggaW50cyBhbmQgdmFyaWFibGUgbmFtZXMKICAgICAgICBpbnRlZ2VyID0gcHlwYXJzaW5nX2NvbW1vbi5zaWduZWRfaW50ZWdlcgogICAgICAgIHZhcm5hbWUgPSBweXBhcnNpbmdfY29tbW9uLmlkZW50aWZpZXIgCiAgICAgICAgCiAgICAgICAgYXJpdGhfZXhwciA9IGluZml4Tm90YXRpb24oaW50ZWdlciB8IHZhcm5hbWUsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgKCctJywgMSwgb3BBc3NvYy5SSUdIVCksCiAgICAgICAgICAgIChvbmVPZignKiAvJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIChvbmVPZignKyAtJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIF0pCiAgICAgICAgCiAgICAgICAgYXJpdGhfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgNSszKjYKICAgICAgICAgICAgKDUrMykqNgogICAgICAgICAgICAtMi0tMTEKICAgICAgICAgICAgJycnLCBmdWxsRHVtcD1GYWxzZSkKICAgIHByaW50czo6CiAgICAgICAg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dGVtcyB3aXRoaW4gdGhlIG5lc3RlZCBsaXN0cyAoZGVmYXVsdD1De05vbmV9KQogICAgIC0gaWdub3JlRXhwciAtIGV4cHJlc3Npb24gZm9yIGlnbm9yaW5nIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGVsaW1pdGVycyAoZGVmYXVsdD1De3F1b3RlZFN0cmluZ30pCgogICAgSWYgYW4gZXhwcmVzc2lvbiBpcyBub3QgcHJvdmlkZWQgZm9yIHRoZSBjb250ZW50IGFyZ3VtZW50LCB0aGUgbmVzdGVkCiAgICBleHByZXNzaW9uIHdpbGwgY2FwdHVyZSBhbGwgd2hpdGVzcGFjZS1kZWxpbWl0ZWQgY29udGVudCBiZXR3ZWVuIGRlbGltaXRlcnMKICAgIGFzIGEgbGlzdCBvZiBzZXBhcmF0ZSB2YWx1ZXMuCgogICAgVXNlIHRoZSBDe2lnbm9yZUV4cHJ9IGFyZ3VtZW50IHRvIGRlZmluZSBleHByZXNzaW9ucyB0aGF0IG1heSBjb250YWluCiAgICBvcGVuaW5nIG9yIGNsb3NpbmcgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBvcGVuaW5nCiAgICBvciBjbG9zaW5nIGNoYXJhY3RlcnMgZm9yIG5lc3RpbmcsIHN1Y2ggYXMgcXVvdGVkU3RyaW5nIG9yIGEgY29tbWVudAogICAgZXhwcmVzc2lvbi4gIFNwZWNpZnkgbXVsdGlwbGUgZXhwcmVzc2lvbnMgdXNpbmcgYW4gQ3tMe09yfX0gb3IgQ3tMe01hdGNoRmlyc3R9fS4KICAgIFRoZSBkZWZhdWx0IGlzIEx7cXVvdGVkU3RyaW5nfSwgYnV0IGlmIG5vIGV4cHJlc3Npb25zIGFyZSB0byBiZSBpZ25vcmVkLAogICAgdGhlbiBwYXNzIEN7Tm9uZX0gZm9yIHRoaXMgYXJndW1lbnQuCgogICAgRXhhbXBsZTo6CiAgICAgICAgZGF0YV90eXBlID0gb25lT2YoInZvaWQgaW50IHNob3J0IGxvbmcgY2hhciBmbG9hdCBkb3VibGUiKQogICAgICAgIGRlY2xfZGF0YV90eXBlID0gQ29tYmluZShkYXRhX3R5cGUgKyBPcHRpb25hbChXb3JkKCcqJykpKQogICAgICAgIGlkZW50ID0gV29yZChhbHBoYXMrJ18nLCBhbHBoYW51bXMrJ18nKQogICAgICAgIG51bWJlciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyCiAgICAgICAgYXJnID0gR3JvdXAoZGVjbF9kYXRhX3R5cGUgKyBpZGVudCkKICAgICAgICBMUEFSLFJQQVIgPSBtYXAoU3VwcHJlc3MsICIoKSIpCgogICAgICAgIGNvZGVfYm9keSA9IG5lc3RlZEV4cHIoJ3snLCAnfScsIGlnbm9yZUV4cHI9KHF1b3RlZFN0cmluZyB8IGNTdHlsZUNvbW1lbnQpKQoKICAgICAgICBjX2Z1bmN0aW9uID0gKGRlY2xfZGF0YV90eXBlKCJ0eXBlIikgCiAgICAgICAgICAgICAgICAgICAgICArIGlkZW50KCJuYW1lIikKICAgICAgICAgICAgICAgICAgICAgICsgTFBBUiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QoYXJnKSwgW10pKCJhcmdzIikgKyBSUEFSIAogICAgICAgICAgICAgICAgICAgICAgKyBjb2RlX2JvZHkoImJvZHkiKSkKICAgICAgICBjX2Z1bmN0aW9uLmlnbm9yZShjU3R5bGVDb21tZW50KQogICAgICAgIAogICAgICAgIHNvdXJjZV9jb2RlID0gJycnCiAgICAgICAgICAgIGludCBpc19vZGQoaW50IHgpIHsgCiAgICAgICAgICAgICAgICByZXR1cm4gKHglMik7IAogICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgaW50IGRlY190b19oZXgoY2hhciBoY2hhcikgeyAKICAgICAgICAgICAgICAgIGlmIChoY2hhciA+PSAnMCcgJiYgaGNoYXIgPD0gJzknKSB7IAogICAgICAgICAgICAgICAgICAgIHJldHVybiAob3JkKGhjaGFyKS1vcmQoJzAnKSk7IAogICAgICAgICAgICAgICAgfSBlbHNlIHsgCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgxMCtvcmQoaGNoYXIpLW9yZCgnQScpKTsKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0KICAgICAgICAnJycKICAgICAgICBmb3IgZnVuYyBpbiBjX2Z1bmN0aW9uLnNlYXJjaFN0cmluZyhzb3VyY2VfY29kZSk6CiAgICAgICAgICAgIHByaW50KCIlKG5hbWUpcyAoJSh0eXBlKXMpIGFyZ3M6ICUoYXJncylzIiAlIGZ1bmMpCgogICAgcHJpbnRzOjoKICAgICAgICBpc19vZGQgKGludCkgYXJnczogW1snaW50JywgJ3gnXV0KICAgICAgICBkZWNfdG9faGV4IChpbnQpIGFyZ3M6IFtbJ2NoYXInLCAnaGNoYXInXV0KICAgIHoub3BlbmluZyBhbmQgY2xvc2luZyBzdHJpbmdzIGNhbm5vdCBiZSB0aGUgc2FtZU5yjQAAAHKDAwAAYwEAAAAAAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAoAChAFMActIAAACpAXK7AAAAcncAAAByeQAAAHJ5AAAAcnoAAAByewAAAGcUAAByfAAAAHocbmVzdGVkRXhwci48bG9jYWxzPi48bGFtYmRhPmMBAAAAAAAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAKAAoQBTAHLSAAAAcskDAABydwAAAHJ5AAAAcnkAAAByegAAAHJ7AAAAahQAAHJ8AAAAYwEAAAAAAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAoAChAFMActIAAAByyQMAAHJ3AAAAcnkAAAByeQAAAHJ6AAAAcnsAAABwFAAAcnwAAABjAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQCgAKEAUwBy0gAAAHLJAwAAcncAAAByeQAAAHJ5AAAAcnoAAAByewAAAHQUAAByfAAAAHpPb3BlbmluZyBhbmQgY2xvc2luZyBhcmd1bWVudHMgbXVzdCBiZSBzdHJpbmdzIGlmIG5vIGNvbnRlbnQgZXhwcmVzc2lvbiBpcyBnaXZlbnoWbmVzdGVkICVzJXMgZXhwcmVzc2lvbikSckACAAByfQAAAHLoAAAAcvgAAAByDAAAAHIbAAAAcgsAAAByJgAAAHKcAQAAcoQAAAByRQAAAHLpAAAAchcAAAByEQAAAHITAAAAci0AAAByNAAAAHK6AQAAKQXaBm9wZW5lctoGY2xvc2Vy2gdjb250ZW50cjIDAAByhwAAAHJ5AAAAcnkAAAByegAAAHJSAAAAJRQAAHNIAAAAADoIAQgBCgEYARgBCAEIART/CAIG/gYEGAEG/wgDCAEIAQj/AgEI/wICDP4IAwb9BgUWAQz/CAIG/gYECAEGAQoBKgIkARIBYwMAAAAAAAAAAAAAAAsAAAAGAAAAAwAAAHPkAAAAhwBmAWQBZAKECH0DhwBmAWQDZASECH0EhwBmAWQFZAaECH0FdAB0AYMAoAJkB6EBoAOhAIMBfQZ0BIMAdASDAKAFfAShARcAoAZkCKEBfQd0BIMAoAV8A6EBoAZkCaEBfQh0BIMAoAV8BaEBoAZkCqEBfQl8AnKmdAd0CHwGgwF8BxcAdAB8CHQHfACDARcAdAh8BoMBFwCDARcAfAkXAIMBfQpuJHQHdAh8BoMBdAB8CHQHfACDARcAdAh8BoMBFwCDARcAgwF9CnwAoAl0CnQBgwAXAKEBAQB8CqAGZAuhAVMAKQxhCgkAAAogICAgSGVscGVyIG1ldGhvZCBmb3IgZGVmaW5pbmcgc3BhY2UtZGVsaW1pdGVkIGluZGVudGF0aW9uIGJsb2Nrcywgc3VjaCBhcwogICAgdGhvc2UgdXNlZCB0byBkZWZpbmUgYmxvY2sgc3RhdGVtZW50cyBpbiBQeXRob24gc291cmNlIGNvZGUuCgogICAgUGFyYW1ldGVyczoKICAgICAtIGJsb2NrU3RhdGVtZW50RXhwciAtIGV4cHJlc3Npb24gZGVmaW5pbmcgc3ludGF4IG9mIHN0YXRlbWVudCB0aGF0CiAgICAgICAgICAgIGlzIHJlcGVhdGVkIHdpdGhpbiB0aGUgaW5kZW50ZWQgYmxvY2sKICAgICAtIGluZGVudFN0YWNrIC0gbGlzdCBjcmVhdGVkIGJ5IGNhbGxlciB0byBtYW5hZ2UgaW5kZW50YXRpb24gc3RhY2sKICAgICAgICAgICAgKG11bHRpcGxlIHN0YXRlbWVudFdpdGhJbmRlbnRlZEJsb2NrIGV4cHJlc3Npb25zIHdpdGhpbiBhIHNpbmdsZSBncmFtbWFyCiAgICAgICAgICAgIHNob3VsZCBzaGFyZSBhIGNvbW1vbiBpbmRlbnRTdGFjaykKICAgICAtIGluZGVudCAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGJsb2NrIG11c3QgYmUgaW5kZW50ZWQgYmV5b25kIHRoZQogICAgICAgICAgICB0aGUgY3VycmVudCBsZXZlbDsgc2V0IHRvIEZhbHNlIGZvciBibG9jayBvZiBsZWZ0LW1vc3Qgc3RhdGVtZW50cwogICAgICAgICAgICAoZGVmYXVsdD1De1RydWV9KQoKICAgIEEgdmFsaWQgYmxvY2sgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBDe2Jsb2NrU3RhdGVtZW50fS4KCiAgICBFeGFtcGxlOjoKICAgICAgICBkYXRhID0gJycnCiAgICAgICAgZGVmIEEoeik6CiAgICAgICAgICBBMQogICAgICAgICAgQiA9IDEwMAogICAgICAgICAgRyA9IEEyCiAgICAgICAgICBBMgogICAgICAgICAgQTMKICAgICAgICBCCiAgICAgICAgZGVmIEJCKGEsYixjKToKICAgICAgICAgIEJCMQogICAgICAgICAgZGVmIEJCQSgpOgogICAgICAgICAgICBiYmExCiAgICAgICAgICAgIGJiYTIKICAgICAgICAgICAgYmJhMwogICAgICAgIEMKICAgICAgICBECiAgICAgICAgZGVmIHNwYW0oeCx5KToKICAgICAgICAgICAgIGRlZiBlZ2dzKHopOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAnJycKCgogICAgICAgIGluZGVudFN0YWNrID0gWzFdCiAgICAgICAgc3RtdCA9IEZvcndhcmQoKQoKICAgICAgICBpZGVudGlmaWVyID0gV29yZChhbHBoYXMsIGFscGhhbnVtcykKICAgICAgICBmdW5jRGVjbCA9ICgiZGVmIiArIGlkZW50aWZpZXIgKyBHcm91cCggIigiICsgT3B0aW9uYWwoIGRlbGltaXRlZExpc3QoaWRlbnRpZmllcikgKSArICIpIiApICsgIjoiKQogICAgICAgIGZ1bmNfYm9keSA9IGluZGVudGVkQmxvY2soc3RtdCwgaW5kZW50U3RhY2spCiAgICAgICAgZnVuY0RlZiA9IEdyb3VwKCBmdW5jRGVjbCArIGZ1bmNfYm9keSApCgogICAgICAgIHJ2YWx1ZSA9IEZvcndhcmQoKQogICAgICAgIGZ1bmNDYWxsID0gR3JvdXAoaWRlbnRpZmllciArICIoIiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QocnZhbHVlKSkgKyAiKSIpCiAgICAgICAgcnZhbHVlIDw8IChmdW5jQ2FsbCB8IGlkZW50aWZpZXIgfCBXb3JkKG51bXMpKQogICAgICAgIGFzc2lnbm1lbnQgPSBHcm91cChpZGVudGlmaWVyICsgIj0iICsgcnZhbHVlKQogICAgICAgIHN0bXQgPDwgKCBmdW5jRGVmIHwgYXNzaWdubWVudCB8IGlkZW50aWZpZXIgKQoKICAgICAgICBtb2R1bGVfYm9keSA9IE9uZU9yTW9yZShzdG10KQoKICAgICAgICBwYXJzZVRyZWUgPSBtb2R1bGVfYm9keS5wYXJzZVN0cmluZyhkYXRhKQogICAgICAgIHBhcnNlVHJlZS5wcHJpbnQoKQogICAgcHJpbnRzOjoKICAgICAgICBbWydkZWYnLAogICAgICAgICAgJ0EnLAogICAgICAgICAgWycoJywgJ3onLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1snQTEnXSwgW1snQicsICc9JywgJzEwMCddXSwgW1snRycsICc9JywgJ0EyJ11dLCBbJ0EyJ10sIFsnQTMnXV1dLAogICAgICAgICAnQicsCiAgICAgICAgIFsnZGVmJywKICAgICAgICAgICdCQicsCiAgICAgICAgICBbJygnLCAnYScsICdiJywgJ2MnLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1snQkIxJ10sIFtbJ2RlZicsICdCQkEnLCBbJygnLCAnKSddLCAnOicsIFtbJ2JiYTEnXSwgWydiYmEyJ10sIFsnYmJhMyddXV1dXV0sCiAgICAgICAgICdDJywKICAgICAgICAgJ0QnLAogICAgICAgICBbJ2RlZicsCiAgICAgICAgICAnc3BhbScsCiAgICAgICAgICBbJygnLCAneCcsICd5JywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbWydkZWYnLCAnZWdncycsIFsnKCcsICd6JywgJyknXSwgJzonLCBbWydwYXNzJ11dXV1dXV0gCiAgICBjAwAAAAAAAAAAAAAABAAAAAQAAAATAAAAc04AAAB8AXQAfACDAWsFchBkAFMAdAF8AXwAgwJ9A3wDiABkARkAawNySnwDiABkARkAawRyPnQCfAB8AWQCgwOCAXQDfAB8AWQDgwOCAWQAUwApBE5ydAAAAHoPaWxsZWdhbCBuZXN0aW5nehBub3QgYSBwZWVyIGVudHJ5KQRy+AAAAHI7AAAAciMAAAByIQAAAKkEcpAAAAByfwEAAHJ4AAAA2gZjdXJDb2ypAdoLaW5kZW50U3RhY2tyeQAAAHJ6AAAA2g9jaGVja1BlZXJJbmRlbnTNFAAAcw4AAAAAAQwABAEKAQwBDAEMAXomaW5kZW50ZWRCbG9jay48bG9jYWxzPi5jaGVja1BlZXJJbmRlbnRjAwAAAAAAAAAAAAAABAAAAAQAAAATAAAAczIAAAB0AHwBfACDAn0DfAOIAGQBGQBrBHIiiACgAXwDoQEBAG4MdAJ8AHwBZAKDA4IBZABTACkDTnJ0AAAAeg5ub3QgYSBzdWJlbnRyeSkDcjsAAAByJAEAAHIhAAAAcs0DAAByzwMAAHJ5AAAAcnoAAADaDmNoZWNrU3ViSW5kZW501RQAAHMIAAAAAAEKAQwBDAJ6JWluZGVudGVkQmxvY2suPGxvY2Fscz4uY2hlY2tTdWJJbmRlbnRjAwAAAAAAAAAAAAAABAAAAAQAAAATAAAAc04AAAB8AXQAfACDAWsFchBkAFMAdAF8AXwAgwJ9A4gAcjZ8A4gAZAEZAGsAcjZ8A4gAZAIZAGsBc0J0AnwAfAFkA4MDggGIAKADoQABAGQAUwApBE5ydAAAAHKDAQAAeg9ub3QgYW4gdW5pbmRlbnQpBHL4AAAAcjsAAAByIQAAAHIfAQAAcs0DAAByzwMAAHJ5AAAAcnoAAADaDWNoZWNrVW5pbmRlbnTcFAAAcwwAAAAAAQwABAEKARwBDAF6JGluZGVudGVkQmxvY2suPGxvY2Fscz4uY2hlY2tVbmluZGVudHoCCSDaBklOREVOVHKgAAAA2ghVTklOREVOVHoOaW5kZW50ZWQgYmxvY2spC3IbAAAAchUAAAByUAIAAHJNAgAAcg8AAAByhAAAAHK6AQAAchMAAAByHQAAAHJSAgAAcmsDAAApC9oSYmxvY2tTdGF0ZW1lbnRFeHByctADAAByUgEAAHLRAwAActIDAABy0wMAAHJlAQAActQDAADaBFBFRVLaBlVOREVOVNoGc21FeHBycnkAAAByzwMAAHJ6AAAAcmgAAAB/FAAAcygAAAAATgwIDAcMBxQBGAESARIBBAEIAgL+AgIW/gICAv4IBAgBFv8GAhABeiNbXDB4YzAtXDB4ZDZcMHhkOC1cMHhmNlwweGY4LVwweGZmXXoXW1wweGExLVwweGJmXDB4ZDdcMHhmN116Al86egdhbnkgdGFnehhndCBsdCBhbXAgbmJzcCBxdW90IGFwb3N6Bj48JiAiJ3oMJig/UDxlbnRpdHk+cnADAAB6Aik7ehJjb21tb24gSFRNTCBlbnRpdHljAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcwwAAAB0AKABfABqAqEBUwApAXpSSGVscGVyIHBhcnNlciBhY3Rpb24gdG8gcmVwbGFjZSBjb21tb24gSFRNTCBlbnRpdGllcyB3aXRoIHRoZWlyIHNwZWNpYWwgY2hhcmFjdGVycykD2g5faHRtbEVudGl0eU1hcHLyAAAA2gZlbnRpdHlydwAAAHJ5AAAAcnkAAAByegAAAHJdAAAA9xQAAHMCAAAAAAJ6FC9cKig/OlteKl18XCooPyEvKSkqegIqL3oPQyBzdHlsZSBjb21tZW50eg88IS0tW1xzXFNdKj8tLT56DEhUTUwgY29tbWVudHoCLip6DHJlc3Qgb2YgbGluZXoRLy8oPzpcXFxufFteXG5dKSp6Ci8vIGNvbW1lbnR6EUMrKyBzdHlsZSBjb21tZW50egMjLip6FFB5dGhvbiBzdHlsZSBjb21tZW50cqECAAD6AiAJ2gljb21tYUl0ZW1ynAMAAGMAAAAAAAAAAAAAAAAAAAAABwAAAEAAAABzqAIAAGUAWgFkAFoCZAFaA2UEZQWDAVoGZQRlB4MBWghlCWUKgwGgC2QCoQGgDGUGoQFaDWUJZQ6DAaALZAOhAaAMZQRlBWQEgwKhAVoPZRBkBYMBoAtkBqEBoAxlBqEBWhFlEYMAoAxlCKEBZAcXAGURgwCgDGUIoQEXAKALZAihAVoSZRKgE2QJZAqEAKEBAQBlEmURZRRlFGQLgwGgFaEAZRIXAIMBFwBCAKALZAyhAVoWZRagE2UXoQEBAGUQZA2DAaALZA6hAaAMZQihAVoYZRBkD4MBoAtkEKEBoAxlCKEBWhllGWUYQgBlEUIAoBqhAFobZRBkEYMBoAtkEqEBoAxlCKEBWhxlCWUdZBMXAGUeZBMXAIMCoAtkFKEBWh9lEGQVgwGgC2QWoQFaIGUQZBeDAaALZBihAVohZSFkGWUhFwBkGhQAFwCgC2QboQFaImUUZSFkGWUhFwBkHBQAFwCDAWQdFwBlFGUhZBllIRcAZBwUABcAgwEXAKALZB6hAVojZSOgJGQfZAqEAKEBAQBkIGUgFwCgC2QhoQFaJWUmZSJlJUIAZSNCAKALZCKhAYMBoAtkIqEBWidlEGQjgwGgC2QkoQFaKGUpZD1kJmQnhAGDAVoqZSlkPmQpZCqEAYMBWitlEGQrgwGgC2QsoQFaLGUQZC2DAaALZC6hAVotZRBkL4MBoAtkMKEBWi5lL6AVoQBlMKAVoQBCAFoxZSlkMWQyhACDAVoyZSZlM2U0ZDODAQ8AZTWDAA8AFwBlCWU2ZDNkNI0CFwBlFGU3ZDWDAYMBFwCDAYMBoBqhAKALZDahAVo4ZTllFGU6oDuhAGU4QgBkN2Q4jQKDAaALZDmhAVo8ZSllBGQ6ZAqEAIMBgwFaPWUpZQRkO2QKhACDAYMBWj5kPFMAKT9ycAAAAGGuCgAACiAgICBIZXJlIGFyZSBzb21lIGNvbW1vbiBsb3ctbGV2ZWwgZXhwcmVzc2lvbnMgdGhhdCBtYXkgYmUgdXNlZnVsIGluIGp1bXAtc3RhcnRpbmcgcGFyc2VyIGRldmVsb3BtZW50OgogICAgIC0gbnVtZXJpYyBmb3JtcyAoTHtpbnRlZ2VyczxpbnRlZ2VyPn0sIEx7cmVhbHM8cmVhbD59LCBMe3NjaWVudGlmaWMgbm90YXRpb248c2NpX3JlYWw+fSkKICAgICAtIGNvbW1vbiBMe3Byb2dyYW1taW5nIGlkZW50aWZpZXJzPGlkZW50aWZpZXI+fQogICAgIC0gbmV0d29yayBhZGRyZXNzZXMgKEx7TUFDPG1hY19hZGRyZXNzPn0sIEx7SVB2NDxpcHY0X2FkZHJlc3M+fSwgTHtJUHY2PGlwdjZfYWRkcmVzcz59KQogICAgIC0gSVNPODYwMSBMe2RhdGVzPGlzbzg2MDFfZGF0ZT59IGFuZCBMe2RhdGV0aW1lPGlzbzg2MDFfZGF0ZXRpbWU+fQogICAgIC0gTHtVVUlEPHV1aWQ+fQogICAgIC0gTHtjb21tYS1zZXBhcmF0ZWQgbGlzdDxjb21tYV9zZXBhcmF0ZWRfbGlzdD59CiAgICBQYXJzZSBhY3Rpb25zOgogICAgIC0gQ3tMe2NvbnZlcnRUb0ludGVnZXJ9fQogICAgIC0gQ3tMe2NvbnZlcnRUb0Zsb2F0fX0KICAgICAtIEN7THtjb252ZXJ0VG9EYXRlfX0KICAgICAtIEN7THtjb252ZXJ0VG9EYXRldGltZX19CiAgICAgLSBDe0x7c3RyaXBIVE1MVGFnc319CiAgICAgLSBDe0x7dXBjYXNlVG9rZW5zfX0KICAgICAtIEN7THtkb3duY2FzZVRva2Vuc319CgogICAgRXhhbXBsZTo6CiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgKzEwMAogICAgICAgICAgICAzLjE0MTU5CiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmZudW1iZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgZmxvYXQKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgKzEwMAogICAgICAgICAgICAzLjE0MTU5CiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmhleF9pbnRlZ2VyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGhleCBudW1iZXJzCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICBGRgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uZnJhY3Rpb24ucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgZnJhY3Rpb25zCiAgICAgICAgICAgIDEvMgogICAgICAgICAgICAtMy80CiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5taXhlZF9pbnRlZ2VyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgICAgICAxCiAgICAgICAgICAgIDEvMgogICAgICAgICAgICAtMy80CiAgICAgICAgICAgIDEtMy80CiAgICAgICAgICAgICcnJykKCiAgICAgICAgaW1wb3J0IHV1aWQKICAgICAgICBweXBhcnNpbmdfY29tbW9uLnV1aWQuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAodXVpZC5VVUlEKSkKICAgICAgICBweXBhcnNpbmdfY29tbW9uLnV1aWQucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgdXVpZAogICAgICAgICAgICAxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgKICAgICAgICAgICAgJycnKQogICAgcHJpbnRzOjoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlCiAgICAgICAgMTAwCiAgICAgICAgWzEwMF0KCiAgICAgICAgLTEwMAogICAgICAgIFstMTAwXQoKICAgICAgICArMTAwCiAgICAgICAgWzEwMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyBmbG9hdAogICAgICAgIDEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgLTEwMAogICAgICAgIFstMTAwLjBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwLjBdCgogICAgICAgIDMuMTQxNTkKICAgICAgICBbMy4xNDE1OV0KCiAgICAgICAgNi4wMmUyMwogICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgMWUtMTIKICAgICAgICBbMWUtMTJdCgogICAgICAgICMgaGV4IG51bWJlcnMKICAgICAgICAxMDAKICAgICAgICBbMjU2XQoKICAgICAgICBGRgogICAgICAgIFsyNTVdCgogICAgICAgICMgZnJhY3Rpb25zCiAgICAgICAgMS8yCiAgICAgICAgWzAuNV0KCiAgICAgICAgLTMvNAogICAgICAgIFstMC43NV0KCiAgICAgICAgIyBtaXhlZCBmcmFjdGlvbnMKICAgICAgICAxCiAgICAgICAgWzFdCgogICAgICAgIDEvMgogICAgICAgIFswLjVdCgogICAgICAgIC0zLzQKICAgICAgICBbLTAuNzVdCgogICAgICAgIDEtMy80CiAgICAgICAgWzEuNzVdCgogICAgICAgICMgdXVpZAogICAgICAgIDEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OAogICAgICAgIFtVVUlEKCcxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgnKV0KICAgINoHaW50ZWdlcnoLaGV4IGludGVnZXJyhAMAAHoIWystXT9cZCt6DnNpZ25lZCBpbnRlZ2VycpsDAADaCGZyYWN0aW9uYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHMQAAAAfABkARkAfABkAhkAGwBTACkDTnIBAAAAcnQAAAByeQAAAHJ3AAAAcnkAAAByeQAAAHJ6AAAAcnsAAAC0FQAAcnwAAAB6GXB5cGFyc2luZ19jb21tb24uPGxhbWJkYT5y8gIAAHoiZnJhY3Rpb24gb3IgbWl4ZWQgaW50ZWdlci1mcmFjdGlvbnoNWystXT9cZCtcLlxkKnoLcmVhbCBudW1iZXJ6K1srLV0/XGQrKFtlRV1bKy1dP1xkK3xcLlxkKihbZUVdWystXT9cZCspPyl6JHJlYWwgbnVtYmVyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbnodWystXT9cZCtcLj9cZCooW2VFXVsrLV0/XGQrKT/aB2ZudW1iZXJyBAMA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