REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 234.84 KB
Close
/proc/self/root/opt/alt/python39/lib/python3.9/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-39.pyc
Text
Base64
YQ0NCgAAAACAmVJl8isEAOMAAAAAAAAAAAAAAAAAAAAACwAAAEAAAABz0A0AAGQAWgBkAVoBZAJaAmQDWgNkBGQFbARaBGQEZAZsBW0GWgcBAGQEZAVsCFoIZARkBWwJWglkBGQFbApaCmQEZAVsC1oLZARkBWwMWgxkBGQFbA1aDWQEZAVsDloOZARkBWwPWg9kBGQFbBBaEGQEZAdsEW0RWhEBAGQEZAhsEm0TWhMBAGQEZAVsFFoUZARkCWwVbRZaFgEAZARkCmwXbRhaGAEAehBkBGQLbBRtGVoZAQBXAG4eBABlGnnSAQABAAEAZARkDGwUbRtaGQEAWQBuAjAAehBkBGQNbBxtHVodAQBXAG4gBABlGpABeQQBAAEAAQBkBGQNbB5tHVodAQBZAG4CMAB6IGQEZA5sH20gWiABAGQEZA9sH20hWiFtIloiAQBXAG4wBABlGpABeVYBAAEAAQBkBGQObA1tIFogAQBkBGQPbA1tIVohbSJaIgEAWQBuAjAAehBkBGQQbA1tI1okAQBXAG4+BABlGpABeaYBAAEAAQB6EGQEZBBsJW0jWiQBAFcAbhgEAGUakAF5oAEAAQABAGQFWiRZAG4CMABZAG4CMAB6EGQEZBFsEG0mWiYBAFcAbiIEAGUakAF52gEAAQABAEcAZBJkE4QAZBODAlomWQBuAjAAZSaDAFonZBRlJ18AZBVlJ18oZSaDAFopZBZlKV8AZBdlKV8qZBdlKV8rZBdlKV8sZBdlKV8tZBdlKV8uZBhkGYQAZS9lKYMBRACDAWUpXzBkGmQbhABaMWUxZSlfMmcAZByiAVozZTRlCWo1gwFkBWQdhQIZAFo2ZTZkBBkAZB1rAlo3ZTeQAnKYZQlqOFo5ZTpaO2U8Wj1lOlo+ZTpaP2VAZUFlQmVDZURlNGVFZUZlR2VIZUlnC1pKbl5lCWpLWjllTFpNZB5kH4QAWj9nAFpKZARkBWxOWk5kIKBPoQBEAF02WlB6FGVKoFFlUmVOZVCDAqEBAQBXAG4aBABlU5ACefABAAEAAQBZAJACcb5ZAG4CMACQAnG+ZVRkIWQihABlTWQjgwFEAIMBgwFaVWQkZCWEAFpWZQRqV2UEalgXAFpZZCZaWmVaZCcXAFpbZVllWhcAWlxlPGQogwFaXWQpoF5kKmQihABlBGpfRACDAaEBWmCQAWRD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bmcgbW9kdWxlIC0gQ2xhc3NlcyBhbmQgbWV0aG9kcyB0byBkZWZpbmUgYW5kIGV4ZWN1dGUgcGFyc2luZyBncmFtbWFycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIHB5cGFyc2luZyBtb2R1bGUgaXMgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gY3JlYXRpbmcgYW5kCmV4ZWN1dGluZyBzaW1wbGUgZ3JhbW1hcnMsIHZzLiB0aGUgdHJhZGl0aW9uYWwgbGV4L3lhY2MgYXBwcm9hY2gsIG9yIHRoZQp1c2Ugb2YgcmVndWxhciBleHByZXNzaW9ucy4gIFdpdGggcHlwYXJzaW5nLCB5b3UgZG9uJ3QgbmVlZCB0byBsZWFybgphIG5ldyBzeW50YXggZm9yIGRlZmluaW5nIGdyYW1tYXJzIG9yIG1hdGNoaW5nIGV4cHJlc3Npb25zIC0gdGhlIHBhcnNpbmcKbW9kdWxlIHByb3ZpZGVzIGEgbGlicmFyeSBvZiBjbGFzc2VzIHRoYXQgeW91IHVzZSB0byBjb25zdHJ1Y3QgdGhlCmdyYW1tYXIgZGlyZWN0bHkgaW4gUHl0aG9uLgoKSGVyZSBpcyBhIHByb2dyYW0gdG8gcGFyc2UgIkhlbGxvLCBXb3JsZCEiIChvciBhbnkgZ3JlZXRpbmcgb2YgdGhlIGZvcm0KYGAiPHNhbHV0YXRpb24+LCA8YWRkcmVzc2VlPiEiYGApLCBidWlsdCB1cCB1c2luZyA6Y2xhc3M6YFdvcmRgLAo6Y2xhc3M6YExpdGVyYWxgLCBhbmQgOmNsYXNzOmBBbmRgIGVsZW1lbnRzCih0aGUgOmNsYXNzOmAnKyc8UGFyc2VyRWxlbWVudC5fX2FkZF9fPmAgb3BlcmF0b3JzIGNyZWF0ZSA6Y2xhc3M6YEFuZGAgZXhwcmVzc2lvbnMsCmFuZCB0aGUgc3RyaW5ncyBhcmUgYXV0by1jb252ZXJ0ZWQgdG8gOmNsYXNzOmBMaXRlcmFsYCBleHByZXNzaW9ucyk6OgoKICAgIGZyb20gcGlwLl92ZW5kb3IucHlwYXJzaW5nIGltcG9ydCBXb3JkLCBhbHBoYXMKCiAgICAjIGRlZmluZSBncmFtbWFyIG9mIGEgZ3JlZXRpbmcKICAgIGdyZWV0ID0gV29yZChhbHBoYXMpICsgIiwiICsgV29yZChhbHBoYXMpICsgIiEiCgogICAgaGVsbG8gPSAiSGVsbG8sIFdvcmxkISIKICAgIHByaW50IChoZWxsbywgIi0+IiwgZ3JlZXQucGFyc2VTdHJpbmcoaGVsbG8pKQoKVGhlIHByb2dyYW0gb3V0cHV0cyB0aGUgZm9sbG93aW5nOjoKCiAgICBIZWxsbywgV29ybGQhIC0+IFsnSGVsbG8nLCAnLCcsICdXb3JsZCcsICchJ10KClRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYW1tYXIgaXMgcXVpdGUgcmVhZGFibGUsIG93aW5nIHRvIHRoZQpzZWxmLWV4cGxhbmF0b3J5IGNsYXNzIG5hbWVzLCBhbmQgdGhlIHVzZSBvZiAnKycsICd8JyBhbmQgJ14nIG9wZXJhdG9ycy4KClRoZSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2Agb2JqZWN0IHJldHVybmVkIGZyb20KOmNsYXNzOmBQYXJzZXJFbGVtZW50LnBhcnNlU3RyaW5nYCBjYW4gYmUKYWNjZXNzZWQgYXMgYSBuZXN0ZWQgbGlzdCwgYSBkaWN0aW9uYXJ5LCBvciBhbiBvYmplY3Qgd2l0aCBuYW1lZAphdHRyaWJ1dGVzLgoKVGhlIHB5cGFyc2luZyBtb2R1bGUgaGFuZGxlcyBzb21lIG9mIHRoZSBwcm9ibGVtcyB0aGF0IGFyZSB0eXBpY2FsbHkKdmV4aW5nIHdoZW4gd3JpdGluZyB0ZXh0IHBhcnNlcnM6CgogIC0gZXh0cmEgb3IgbWlzc2luZyB3aGl0ZXNwYWNlICh0aGUgYWJvdmUgcHJvZ3JhbSB3aWxsIGFsc28gaGFuZGxlCiAgICAiSGVsbG8sV29ybGQhIiwgIkhlbGxvICAsICBXb3JsZCAgISIsIGV0Yy4pCiAgLSBxdW90ZWQgc3RyaW5ncwogIC0gZW1iZWRkZWQgY29tbWVudHMKCgpHZXR0aW5nIFN0YXJ0ZWQgLQotLS0tLS0tLS0tLS0tLS0tLQpWaXNpdCB0aGUgY2xhc3NlcyA6Y2xhc3M6YFBhcnNlckVsZW1lbnRgIGFuZCA6Y2xhc3M6YFBhcnNlUmVzdWx0c2AgdG8Kc2VlIHRoZSBiYXNlIGNsYXNzZXMgdGhhdCBtb3N0IG90aGVyIHB5cGFyc2luZwpjbGFzc2VzIGluaGVyaXQgZnJvbS4gVXNlIHRoZSBkb2NzdHJpbmdzIGZvciBleGFtcGxlcyBvZiBob3cgdG86CgogLSBjb25zdHJ1Y3QgbGl0ZXJhbCBtYXRjaCBleHByZXNzaW9ucyBmcm9tIDpjbGFzczpgTGl0ZXJhbGAgYW5kCiAgIDpjbGFzczpgQ2FzZWxlc3NMaXRlcmFsYCBjbGFzc2VzCiAtIGNvbnN0cnVjdCBjaGFyYWN0ZXIgd29yZC1ncm91cCBleHByZXNzaW9ucyB1c2luZyB0aGUgOmNsYXNzOmBXb3JkYAogICBjbGFzcwogLSBzZWUgaG93IHRvIGNyZWF0ZSByZXBldGl0aXZlIGV4cHJlc3Npb25zIHVzaW5nIDpjbGFzczpgWmVyb09yTW9yZWAKICAgYW5kIDpjbGFzczpgT25lT3JNb3JlYCBjbGFzc2VzCiAtIHVzZSA6Y2xhc3M6YCcrJzxBbmQ+YCwgOmNsYXNzOmAnfCc8TWF0Y2hGaXJzdD5gLCA6Y2xhc3M6YCdeJzxPcj5gLAogICBhbmQgOmNsYXNzOmAnJic8RWFjaD5gIG9wZXJhdG9ycyB0byBjb21iaW5lIHNpbXBsZSBleHByZXNzaW9ucyBpbnRvCiAgIG1vcmUgY29tcGxleCBvbmVzCiAtIGFzc29jaWF0ZSBuYW1lcyB3aXRoIHlvdXIgcGFyc2VkIHJlc3VsdHMgdXNpbmcKICAgOmNsYXNzOmBQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lYAogLSBhY2Nlc3MgdGhlIHBhcnNlZCBkYXRhLCB3aGljaCBpcyByZXR1cm5lZCBhcyBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYAogICBvYmplY3QKIC0gZmluZCBzb21lIGhlbHBmdWwgZXhwcmVzc2lvbiBzaG9ydC1jdXRzIGxpa2UgOmNsYXNzOmBkZWxpbWl0ZWRMaXN0YAogICBhbmQgOmNsYXNzOmBvbmVPZmAKIC0gZmluZCBtb3JlIHVzZWZ1bCBjb21tb24gZXhwcmVzc2lvbnMgaW4gdGhlIDpjbGFzczpgcHlwYXJzaW5nX2NvbW1vbmAKICAgbmFtZXNwYWNlIGNsYXNzCnoFMi40Ljd6FTMwIE1hciAyMDIwIDAwOjQzIFVUQ3oqUGF1bCBNY0d1aXJlIDxwdG1jZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+6QAAAABOKQHaA3JlZikB2ghkYXRldGltZSkB2gppdGVtZ2V0dGVyKQHaBXdyYXBzKQHaDmNvbnRleHRtYW5hZ2VyKQHaC2ZpbHRlcmZhbHNlKQHaDGlmaWx0ZXJmYWxzZSkB2gVSTG9jaykB2ghJdGVyYWJsZSkC2g5NdXRhYmxlTWFwcGluZ9oHTWFwcGluZykB2gtPcmRlcmVkRGljdCkB2g9TaW1wbGVOYW1lc3BhY2VjAAAAAAAAAAAAAAAAAAAAAAEAAABAAAAAcwwAAABlAFoBZABaAmQBUwApAnIOAAAATikD2ghfX25hbWVfX9oKX19tb2R1bGVfX9oMX19xdWFsbmFtZV9fqQByEgAAAHISAAAA+oQvYnVpbGRkaXIvYnVpbGQvQlVJTERST09UL2FsdC1weXRob24zOS1waXAtMjEuMy4xLTIuZWw4Lng4Nl82NC9vcHQvYWx0L3B5dGhvbjM5L2xpYi9weXRob24zLjkvc2l0ZS1wYWNrYWdlcy9waXAvX3ZlbmRvci9weXBhcnNpbmcucHlyDgAAAJYAAADzAAAAAHIOAAAAYUECAAAKICAgIEEgY3Jvc3MtdmVyc2lvbiBjb21wYXRpYmlsaXR5IGNvbmZpZ3VyYXRpb24gZm9yIHB5cGFyc2luZyBmZWF0dXJlcyB0aGF0IHdpbGwgYmUKICAgIHJlbGVhc2VkIGluIGEgZnV0dXJlIHZlcnNpb24uIEJ5IHNldHRpbmcgdmFsdWVzIGluIHRoaXMgY29uZmlndXJhdGlvbiB0byBUcnVlLAogICAgdGhvc2UgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQgaW4gcHJpb3IgdmVyc2lvbnMgZm9yIGNvbXBhdGliaWxpdHkgZGV2ZWxvcG1lbnQKICAgIGFuZCB0ZXN0aW5nLgoKICAgICAtIGNvbGxlY3RfYWxsX0FuZF90b2tlbnMgLSBmbGFnIHRvIGVuYWJsZSBmaXggZm9yIElzc3VlICM2MyB0aGF0IGZpeGVzIGVycm9uZW91cyBncm91cGluZwogICAgICAgb2YgcmVzdWx0cyBuYW1lcyB3aGVuIGFuIEFuZCBleHByZXNzaW9uIGlzIG5lc3RlZCB3aXRoaW4gYW4gT3Igb3IgTWF0Y2hGaXJzdDsgc2V0IHRvCiAgICAgICBUcnVlIHRvIGVuYWJsZSBidWdmaXggcmVsZWFzZWQgaW4gcHlwYXJzaW5nIDIuMy4wLCBvciBGYWxzZSB0byBwcmVzZXJ2ZQogICAgICAgcHJlLTIuMy4wIGhhbmRsaW5nIG9mIG5hbWVkIHJlc3VsdHMKVGGTAwAACkRpYWdub3N0aWMgY29uZmlndXJhdGlvbiAoYWxsIGRlZmF1bHQgdG8gRmFsc2UpCiAgICAgLSB3YXJuX211bHRpcGxlX3Rva2Vuc19pbl9uYW1lZF9hbHRlcm5hdGlvbiAtIGZsYWcgdG8gZW5hYmxlIHdhcm5pbmdzIHdoZW4gYSByZXN1bHRzCiAgICAgICBuYW1lIGlzIGRlZmluZWQgb24gYSBNYXRjaEZpcnN0IG9yIE9yIGV4cHJlc3Npb24gd2l0aCBvbmUgb3IgbW9yZSBBbmQgc3ViZXhwcmVzc2lvbnMKICAgICAgIChvbmx5IHdhcm5zIGlmIF9fY29tcGF0X18uY29sbGVjdF9hbGxfQW5kX3Rva2VucyBpcyBGYWxzZSkKICAgICAtIHdhcm5fdW5ncm91cGVkX25hbWVkX3Rva2Vuc19pbl9jb2xsZWN0aW9uIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hlbiBhIHJlc3VsdHMKICAgICAgIG5hbWUgaXMgZGVmaW5lZCBvbiBhIGNvbnRhaW5pbmcgZXhwcmVzc2lvbiB3aXRoIHVuZ3JvdXBlZCBzdWJleHByZXNzaW9ucyB0aGF0IGFsc28KICAgICAgIGhhdmUgcmVzdWx0cyBuYW1lcwogICAgIC0gd2Fybl9uYW1lX3NldF9vbl9lbXB0eV9Gb3J3YXJkIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hhbiBhIEZvcndhcmQgaXMgZGVmaW5lZAogICAgICAgd2l0aCBhIHJlc3VsdHMgbmFtZSwgYnV0IGhhcyBubyBjb250ZW50cyBkZWZpbmVkCiAgICAgLSB3YXJuX29uX211bHRpcGxlX3N0cmluZ19hcmdzX3RvX29uZW9mIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hhbiBvbmVPZiBpcwogICAgICAgaW5jb3JyZWN0bHkgY2FsbGVkIHdpdGggbXVsdGlwbGUgc3RyIGFyZ3VtZW50cwogICAgIC0gZW5hYmxlX2RlYnVnX29uX25hbWVkX2V4cHJlc3Npb25zIC0gZmxhZyB0byBhdXRvLWVuYWJsZSBkZWJ1ZyBvbiBhbGwgc3Vic2VxdWVudAogICAgICAgY2FsbHMgdG8gUGFyc2VyRWxlbWVudC5zZXROYW1lKCkKRmMBAAAAAAAAAAAAAAACAAAABQAAAEMAAABzJAAAAGcAfABdHH0BfAGgAGQAoQFzHHwBoABkAaEBcgR8AZECcQRTACkCWgdlbmFibGVfWgV3YXJuX6kB2gpzdGFydHN3aXRoKQLaAi4w2gJubXISAAAAchIAAAByEwAAANoKPGxpc3Rjb21wPrwAAAByFAAAAHIZAAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQwAAAHMcAAAAZAF0AF8BZAF0AF8CZAF0AF8DZAF0AF8EZABTAKkCTlQpBdoIX19kaWFnX1/aKXdhcm5fbXVsdGlwbGVfdG9rZW5zX2luX25hbWVkX2FsdGVybmF0aW9u2il3YXJuX3VuZ3JvdXBlZF9uYW1lZF90b2tlbnNfaW5fY29sbGVjdGlvbtoed2Fybl9uYW1lX3NldF9vbl9lbXB0eV9Gb3J3YXJk2iV3YXJuX29uX211bHRpcGxlX3N0cmluZ19hcmdzX3RvX29uZW9mchIAAAByEgAAAHISAAAAchMAAADaFF9lbmFibGVfYWxsX3dhcm5pbmdzvgAAAHMIAAAAAAEGAQYBBgFyIAAAACl02gtfX3ZlcnNpb25fX9oPX192ZXJzaW9uVGltZV9f2gpfX2F1dGhvcl9f2gpfX2NvbXBhdF9fchsAAADaA0FuZNoPQ2FzZWxlc3NLZXl3b3Jk2g9DYXNlbGVzc0xpdGVyYWzaCkNoYXJzTm90SW7aB0NvbWJpbmXaBERpY3TaBEVhY2jaBUVtcHR52gpGb2xsb3dlZEJ52gdGb3J3YXJk2gpHb1RvQ29sdW1u2gVHcm91cNoHS2V5d29yZNoHTGluZUVuZNoJTGluZVN0YXJ02gdMaXRlcmFs2gpQcmVjZWRlZEJ52gpNYXRjaEZpcnN02gdOb01hdGNo2gZOb3RBbnnaCU9uZU9yTW9yZdoIT25seU9uY2XaCE9wdGlvbmFs2gJPctoSUGFyc2VCYXNlRXhjZXB0aW9u2hNQYXJzZUVsZW1lbnRFbmhhbmNl2g5QYXJzZUV4Y2VwdGlvbtoPUGFyc2VFeHByZXNzaW9u2hNQYXJzZUZhdGFsRXhjZXB0aW9u2gxQYXJzZVJlc3VsdHPaFFBhcnNlU3ludGF4RXhjZXB0aW9u2g1QYXJzZXJFbGVtZW502gxRdW90ZWRTdHJpbmfaGVJlY3Vyc2l2ZUdyYW1tYXJFeGNlcHRpb27aBVJlZ2V42gZTa2lwVG/aCVN0cmluZ0VuZNoLU3RyaW5nU3RhcnTaCFN1cHByZXNz2gVUb2tlbtoOVG9rZW5Db252ZXJ0ZXLaBVdoaXRl2gRXb3Jk2gdXb3JkRW5k2glXb3JkU3RhcnTaClplcm9Pck1vcmXaBENoYXLaCWFscGhhbnVtc9oGYWxwaGFz2gphbHBoYXM4Yml02gthbnlDbG9zZVRhZ9oKYW55T3BlblRhZ9oNY1N0eWxlQ29tbWVudNoDY29s2hJjb21tYVNlcGFyYXRlZExpc3TaEGNvbW1vbkhUTUxFbnRpdHnaDGNvdW50ZWRBcnJhedoPY3BwU3R5bGVDb21tZW502g9kYmxRdW90ZWRTdHJpbmfaD2RibFNsYXNoQ29tbWVudNoNZGVsaW1pdGVkTGlzdNoGZGljdE9m2g5kb3duY2FzZVRva2Vuc9oFZW1wdHnaB2hleG51bXPaC2h0bWxDb21tZW502hBqYXZhU3R5bGVDb21tZW502gRsaW5l2gdsaW5lRW5k2glsaW5lU3RhcnTaBmxpbmVub9oMbWFrZUhUTUxUYWdz2gttYWtlWE1MVGFnc9oObWF0Y2hPbmx5QXRDb2zaEW1hdGNoUHJldmlvdXNFeHBy2hRtYXRjaFByZXZpb3VzTGl0ZXJhbNoKbmVzdGVkRXhwctoPbnVsbERlYnVnQWN0aW9u2gRudW1z2gVvbmVPZtoHb3BBc3NvY9oSb3BlcmF0b3JQcmVjZWRlbmNl2gpwcmludGFibGVz2ghwdW5jOGJpdNoScHl0aG9uU3R5bGVDb21tZW502gxxdW90ZWRTdHJpbmfaDHJlbW92ZVF1b3Rlc9oRcmVwbGFjZUhUTUxFbnRpdHnaC3JlcGxhY2VXaXRo2gpyZXN0T2ZMaW5l2g9zZ2xRdW90ZWRTdHJpbmfaBnNyYW5nZdoJc3RyaW5nRW5k2gtzdHJpbmdTdGFydNoQdHJhY2VQYXJzZUFjdGlvbtoNdW5pY29kZVN0cmluZ9oMdXBjYXNlVG9rZW5z2g13aXRoQXR0cmlidXRl2g1pbmRlbnRlZEJsb2Nr2g9vcmlnaW5hbFRleHRGb3LaB3VuZ3JvdXDaDWluZml4Tm90YXRpb27aC2xvY2F0ZWRFeHBy2gl3aXRoQ2xhc3PaCkNsb3NlTWF0Y2jaCHRva2VuTWFw2hBweXBhcnNpbmdfY29tbW9u2hFweXBhcnNpbmdfdW5pY29kZdoLdW5pY29kZV9zZXTaFmNvbmRpdGlvbkFzUGFyc2VBY3Rpb27aAnJl6QMAAABjAQAAAAAAAAAAAAAAAwAAAAgAAABDAAAAc2QAAAB0AHwAdAGDAnIOfABTAHoKdAJ8AIMBVwBTAAQAdAN5XgEAAQABAHQBfACDAaAEdAWgBqEAZAGhAn0BdAdkAoMBfQJ8AqAIZANkBIQAoQEBAHwCoAl8AaEBBgBZAFMAMABkBVMAKQZhHwEAAERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHN0cihvYmopIHRoYXQgdHJpZXMgdG8gYmUgVW5pY29kZQogICAgICAgIGZyaWVuZGx5LiBJdCBmaXJzdCB0cmllcyBzdHIob2JqKS4gSWYgdGhhdCBmYWlscyB3aXRoCiAgICAgICAgYSBVbmljb2RlRW5jb2RlRXJyb3IsIHRoZW4gaXQgdHJpZXMgdW5pY29kZShvYmopLiBJdCB0aGVuCiAgICAgICAgPCByZXR1cm5zIHRoZSB1bmljb2RlIG9iamVjdCB8IGVuY29kZXMgaXQgd2l0aCB0aGUgZGVmYXVsdAogICAgICAgIGVuY29kaW5nIHwgLi4uID4uCiAgICAgICAg2hF4bWxjaGFycmVmcmVwbGFjZXoGJiNcZCs7YwEAAAAAAAAAAAAAAAEAAAAGAAAAUwAAAHMkAAAAZAF0AHQBfABkAhkAZANkBIUCGQCDAYMBZANkAIUC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IHRvIGxpc3QgZXhwcmVzc2lvbgogICAgICAgICAgIGFuZCBmdW5jdGlvbiBuYW1lczsgaWYgTm9uZSwgdGhlIGZ1bGwgc3RhY2sgdHJhY2UgbmFtZXMgd2lsbCBiZSBsaXN0ZWQ7IGlmIDAsIG9ubHkKICAgICAgICAgICB0aGUgZmFpbGluZyBpbnB1dCBsaW5lLCBtYXJrZXIsIGFuZCBleGNlcHRpb24gc3RyaW5nIHdpbGwgYmUgc2hvd24KCiAgICAgICAgUmV0dXJucyBhIG11bHRpLWxpbmUgc3RyaW5nIGxpc3RpbmcgdGhlIFBhcnNlckVsZW1lbnRzIGFuZC9vciBmdW5jdGlvbiBuYW1lcyBpbiB0aGUKICAgICAgICBleGNlcHRpb24ncyBzdGFjayB0cmFjZS4KCiAgICAgICAgTm90ZTogdGhlIGRpYWdub3N0aWMgb3V0cHV0IHdpbGwgaW5jbHVkZSBzdHJpbmcgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBleHByZXNzaW9ucwogICAgICAgIHRoYXQgZmFpbGVkIHRvIHBhcnNlLiBUaGVzZSByZXByZXNlbnRhdGlvbnMgd2lsbCBiZSBtb3JlIGhlbHBmdWwgaWYgeW91IHVzZSBgc2V0TmFtZWAgdG8KICAgICAgICBnaXZlIGlkZW50aWZpYWJsZSBuYW1lcyB0byB5b3VyIGV4cHJlc3Npb25zLiBPdGhlcndpc2UgdGhleSB3aWxsIHVzZSB0aGUgZGVmYXVsdCBzdHJpbmcKICAgICAgICBmb3Jtcywgd2hpY2ggbWF5IGJlIGNyeXB0aWMgdG8gcmVhZC4KCiAgICAgICAgZXhwbGFpbigpIGlzIG9ubHkgc3VwcG9ydGVkIHVuZGVyIFB5dGhvbiAzLgogICAgICAgIHIBAAAATvoBIHKsAAAA+gFeegh7MH06IHsxfSkB2gdjb250ZXh0ctAAAAApAtoJcGFyc2VJbXBs2g1fcGFyc2VOb0NhY2hleg17MH0uezF9IC0gezJ9egd7MH0uezF9KQLaB3dyYXBwZXJ6CDxtb2R1bGU+egN7MH3aAQopF9oHaW5zcGVjdHKiAAAA2hFnZXRyZWN1cnNpb25saW1pdHKdAAAAcj0AAADaBmFwcGVuZHJoAAAAcloAAADaBmZv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VoQAWjFkV2RYhABaMmRZZFqEAFozZTRkYmRbZFyEAYMBWjVkAlMAKWNyQgAAAGFTBQAAU3RydWN0dXJlZCBwYXJzZSByZXN1bHRzLCB0byBwcm92aWRlIG11bHRpcGxlIG1lYW5zIG9mIGFjY2VzcyB0bwogICAgdGhlIHBhcnNlZCBkYXRhOgoKICAgICAgIC0gYXMgYSBsaXN0IChgYGxlbihyZXN1bHRzKWBgKQogICAgICAgLSBieSBsaXN0IGluZGV4IChgYHJlc3VsdHNbMF0sIHJlc3VsdHNbMV1gYCwgZXRjLikKICAgICAgIC0gYnkgYXR0cmlidXRlIChgYHJlc3VsdHMuPHJlc3VsdHNOYW1lPmBgIC0gc2VlIDpjbGFzczpgUGFyc2VyRWxlbWVudC5zZXRSZXN1bHRzTmFtZWApCgogICAgRXhhbXBsZTo6CgogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgZGF0ZV9zdHIgPSAoaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgieWVhciIpICsgJy8nCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgibW9udGgiKSArICcvJwogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoImRheSIpKQogICAgICAgICMgZXF1aXZhbGVudCBmb3JtOgogICAgICAgICMgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKCiAgICAgICAgIyBwYXJzZVN0cmluZyByZXR1cm5zIGEgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikKCiAgICAgICAgZGVmIHRlc3QocywgZm49cmVwcik6CiAgICAgICAgICAgIHByaW50KCIlcyAtPiAlcyIgJSAocywgZm4oZXZhbChzKSkpKQogICAgICAgIHRlc3QoImxpc3QocmVzdWx0KSIpCiAgICAgICAgdGVzdCgicmVzdWx0WzBd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Y3MgYW5kIHBvcCB0b2tlbnMgZnJvbSB0aGUgbGlzdCBvZiBwYXJzZWQgdG9rZW5zLiBJZiBwYXNzZWQKICAgICAgICBhIG5vbi1pbnRlZ2VyIGFyZ3VtZW50IChtb3N0IGxpa2VseSBhIHN0cmluZyksIGl0IHdpbGwgdXNlIGBgZGljdGBgCiAgICAgICAgc2VtYW50aWNzIGFuZCBwb3AgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgZnJvbSBhbnkgZGVmaW5lZCByZXN1bHRzCiAgICAgICAgbmFtZXMuIEEgc2Vjb25kIGRlZmF1bHQgcmV0dXJuIHZhbHVlIGFyZ3VtZW50IGlzIHN1cHBvcnRlZCwganVzdCBhcyBpbgogICAgICAgIGBgZGljdC5wb3AoKWBgLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGRlZiByZW1vdmVfZmlyc3QodG9rZW5zKToKICAgICAgICAgICAgICAgIHRva2Vucy5wb3AoMCkKICAgICAgICAgICAgcHJpbnQoT25lT3JNb3JlKFdvcmQobnVtcykpLnBhcnNlU3RyaW5nKCIwIDEyMyAzMjEiKSkgIyAtPiBbJzAnLCAnMTIzJywgJzMyMSddCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShXb3JkKG51bXMpKS5hZGRQYXJzZUFjdGlvbihyZW1vdmVfZmlyc3QpLnBhcnNlU3RyaW5nKCIwIDEyMyAzMjEiKSkgIyAtPiBbJzEyMycsICczMjEnXQoKICAgICAgICAgICAgbGFiZWwgPSBXb3JkKGFscGhhcykKICAgICAgICAgICAgcGF0dCA9IGxhYmVsKCJMQUJFTCIpICsgT25lT3JNb3JlKFdvcmQobnVtcykpCiAgICAgICAgICAgIHByaW50KHBhdHQucGFyc2VTdHJpbmcoIkFBQiAxMjMgMzIxIikuZHVtcCgpKQoKICAgICAgICAgICAgIyBVc2UgcG9wKCkgaW4gYSBwYXJzZSBhY3Rpb24gdG8gcmVtb3ZlIG5hbWVkIHJlc3VsdCAobm90ZSB0aGF0IGNvcnJlc3BvbmRpbmcgdmFsdWUgaXMgbm90CiAgICAgICAgICAgICMgcmVtb3ZlZCBmcm9tIGxpc3QgZm9ybSBv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YSBwYXJ0aWN1bGFyIGxvY2F0aW9uLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIHNzbl9leHByID0gUmVnZXgociJcZFxkXGQtXGRcZC1cZFxkXGRcZCIpCiAgICAgICAgICAgIGhvdXNlX251bWJlcl9leHByID0gU3VwcHJlc3MoJyMnKSArIFdvcmQobnVtcywgYWxwaGFudW1zKQogICAgICAgICAgICB1c2VyX2RhdGEgPSAoR3JvdXAoaG91c2VfbnVtYmVyX2V4cHIpKCJob3VzZV9udW1iZXIiKQogICAgICAgICAgICAgICAgICAgICAgICB8IEdyb3VwKHNzbl9leHByKSgic3NuIikKICAgICAgICAgICAgICAgICAgICAgICAgfCBHcm91cChpbnRlZ2VyKSgiYWdlIikpCiAgICAgICAgICAgIHVzZXJfaW5mbyA9IE9uZU9yTW9yZSh1c2VyX2RhdGEpCgogICAgICAgICAgICByZXN1bHQgPSB1c2VyX2luZm8ucGFyc2VTdHJpbmcoIjIyIDExMS0yMi0zMzMzICMyMjFCIikKICAgICAgICAgICAgZm9yIGl0ZW0gaW4gcmVzdWx0OgogICAgICAgICAgICAgICAgcHJpbnQoaXRlbS5nZXROYW1lKCksICc6JywgaXRlbVswXSkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIGFnZSA6IDIyCiAgICAgICAgICAgIHNzbiA6IDExMS0yMi0zMzMzCiAgICAgICAgICAgIGhvdXNlX251bWJlciA6IDIyMUIKICAgICAgICBOcqwAAAByAQAAACkCcgEAAABylwAAACkJciUBAAByJgEAANoVX1BhcnNlUmVzdWx0c19fbG9va3VwctsAAAByLgEAANoEbmV4dHJMAQAAclkBAAByVwEAACkCctAAAADaA3BhcnISAAAAchIAAAByEwAAANoHZ2V0TmFtZQEEAABzHAAAAAAZBgEGAQYBCAEEAQoCBgEMAQz/AgIc/gIDEgJ6FFBhcnNlUmVzdWx0cy5nZXROYW1lcgEAAABjBQAAAAAAAAAAAAAADAAAAA8AAABDAAAAc3YBAABnAH0FZAF9BnwD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ciBrZXl3b3JkIGFyZ3MgYXMgZGVmaW5lZCBmb3IKICAgICAgICBgcHByaW50LnBwcmludCA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5wcHJpbnQ+YF8gLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGlkZW50ID0gV29yZChhbHBoYXMsIGFscGhhbnVtcykKICAgICAgICAgICAgbnVtID0gV29yZChudW1zKQogICAgICAgICAgICBmdW5jID0gRm9yd2FyZCgpCiAgICAgICAgICAgIHRlcm0gPSBpZGVudCB8IG51bSB8IEdyb3VwKCcoJyArIGZ1bmMgKyAnKScpCiAgICAgICAgICAgIGZ1bmMgPDw9IGlkZW50ICsgR3JvdXAoT3B0aW9uYWwoZGVsaW1pdGVkTGlzdCh0ZXJtKSkpCiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMucGFyc2VTdHJpbmcoImZuYSBhLGIsKGZuYiBjLGQsMjAwKSwxMDAiKQogICAgICAgICAgICByZXN1bHQucHByaW50KHdpZHRoPTQwKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgWydmbmEnLAogICAgICAgICAgICAgWydhJywKICAgICAgICAgICAgICAnYicsCiAgICAgICAgICAgICAgWycoJywgJ2ZuYicsIFsnYycsICdkJywgJzIwMCddLCAnKSddLAogICAgICAgICAgICAgICcxMDAnXV0KICAgICAgICBOKQLaBnBwcmludHIiAQAAqQNy0AAAAHLPAAAAcl0BAAByEgAAAHISAAAAchMAAAByqAEAAGoEAABzAgAAAAAZehNQYXJzZVJlc3VsdHMucHByaW50YwEAAAAAAAAAAAAAAAEAAAAFAAAAQwAAAHMuAAAAfABqAHwAagGgAqEAfABqA2QAdQFyHnwAoAOhAHAgZAB8AGoEfABqBWYEZgJTAHKpAAAAKQZyKwEAAHIuAQAAcmwBAAByJgEAAHInAQAAciUBAABy3wAAAHISAAAAchIAAAByEwAAANoMX19nZXRzdGF0ZV9fhgQAAHMOAAAAAAEEAQgBFAEEAQT9Av96GVBhcnNlUmVzdWx0cy5fX2dl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ICAgICAgICAgIFdvcmQobnVtcykucGFyc2VTdHJpbmcoIkFCQyIpICAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgVzooMDEyMy4uLikgKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQogICAgICAgICAgICBXb3JkKG51bXMpLnNldE5hbWUoImludGVnZXIiKS5wYXJzZVN0cmluZygiQUJDIikgICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCBpbnRlZ2VyIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKICAgICAgICD6CUV4cGVjdGVkICkFciEBAABy9gEAAHIbAAAA2iFlbmFibGVfZGVidWdfb25fbmFtZWRfZXhwcmVzc2lvbnPaCHNldERlYnVncmoBAAByEgAAAHISAAAAchMAAADaB3NldE5hbWWsBQAAcwoAAAAACQYBDAEGAQgBehVQYXJzZXJFbGVtZW50LnNldE5hbWVjAwAAAAAAAAAAAAAAAwAAAAQAAABDAAAAcwwAAAB8AKAAfAF8AqECUwApAWFPAwAACiAgICAgICAgRGVmaW5lIG5hbWUgZm9yIHJlZmVyZW5jaW5nIG1hdGNoaW5nIHRva2VucyBhcyBhIG5lc3RlZCBhdHRyaWJ1dGUKICAgICAgICBvZiB0aGUgcmV0dXJuZWQgcGFyc2UgcmVzdWx0cy4KICAgICAgICBOT1RFOiB0aGlzIHJldHVybnMgYSAqY29weSogb2YgdGhlIG9yaWdpbmFsIDpjbGFzczpgUGFyc2VyRWxlbWVudGAgb2JqZWN0OwogICAgICAgIHRoaXMgaXMgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBkZWZpbmUgYSBiYXNpYyBlbGVtZW50LCBzdWNoIGFzIGFuCiAgICAgICAgaW50ZWdlciwgYW5kIHJlZmVyZW5jZSBpdCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aCBkaWZmZXJlbnQgbmFtZXMuCgogICAgICAgIFlvdSBjYW4gYWxzbyBzZXQgcmVzdWx0cyBuYW1lcyB1c2luZyB0aGUgYWJicmV2aWF0ZWQgc3ludGF4LAogICAgICAgIGBgZXhwcigibmFtZSIpYGAgaW4gcGxhY2Ugb2YgYGBleHByLnNldFJlc3VsdHNOYW1lKCJuYW1lIilgYAogICAgICAgIC0gc2VlIDpjbGFzczpgX19jYWxsX19gLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGRhdGVfc3RyID0gKGludGVnZXIuc2V0UmVzdWx0c05hbWUoInllYXIiKSArICcvJwogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoIm1vbnRoIikgKyAnLycKICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyLnNldFJlc3VsdHNOYW1lKCJkYXkiKSkKCiAgICAgICAgICAgICMgZXF1aXZhbGVudCBmb3JtOgogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJkYXkiKQogICAgICAgICkB2g9fc2V0UmVzdWx0c05hbWWpA3LQAAAAciEBAADaDmxpc3RBbGxNYXRjaGVzchIAAAByEgAAAHITAAAA2g5zZXRSZXN1bHRzTmFtZbsFAABzAgAAAAAVehxQYXJzZXJFbGVtZW50LnNldFJlc3VsdHNOYW1lYwMAAAAAAAAAAAAAAAQAAAADAAAAQwAAAHM0AAAAfACgAKEAfQN8AaABZAGhAXIifAFkAGQChQIZAH0BZAN9AnwBfANfAnwCDAB8A18DfANTACkETtoBKnKXAAAAVCkEcmwBAADaCGVuZHN3aXRocusBAABy9wEAACkEctAAAAByIQEAAHIDAgAA2gduZXdzZWxmchIAAAByEgAAAHITAAAAcgECAADSBQAAcw4AAAAAAQgBCgEMAQQBBgEIAXodUGFyc2VyRWxlbWVudC5fc2V0UmVzdWx0c05hbWVUYwIAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHNAAAAAfAFyJnwAagCJAGQFhwBmAWQCZAOECX0CiAB8Al8BfAJ8AF8AbhZ0AnwAagBkBIMCcjx8AGoAagF8AF8AfABTACkGeqdNZXRob2QgdG8gaW52b2tlIHRoZSBQeXRob24gcGRiIGRlYnVnZ2VyIHdoZW4gdGhpcyBlbGVtZW50IGlzCiAgICAgICAgICAgYWJvdXQgdG8gYmUgcGFyc2VkLiBTZXQgYGBicmVha0ZsYWdgYCB0byBUcnVlIHRvIGVuYWJsZSwgRmFsc2UgdG8KICAgICAgICAgICBkaXNhYmxlLgogICAgICAgIFRjBAAAAAAAAAAAAAAABQAAAAUAAAATAAAAcx4AAABkAWQAbAB9BHwEoAGhAAEAiAB8AHwBfAJ8A4MEUwByGgEAACkC2gNwZGLaCXNldF90cmFjZSkFcr0BAAByzAAAANoJZG9BY3Rpb25z2gxjYWxsUHJlUGFyc2VyCAIAAKkB2gxfcGFyc2VNZXRob2RyEgAAAHITAAAA2gdicmVha2Vy4gUAAHMGAAAAAAEIAggBeidQYXJzZXJFbGVtZW50LnNldEJyZWFrLjxsb2NhbHM+LmJyZWFrZXLaFF9vcmlnaW5hbFBhcnNlTWV0aG9kKQJUVCkD2gZfcGFyc2VyDwIAAHJRAQAAKQNy0AAAANoJYnJlYWtGbGFncg4CAAByEgAAAHIMAgAAchMAAADaCHNldEJyZWFr2wUAAHMQAAAAAAUEAQYBDgUGAQgCDAEKAXoWUGFyc2VyRWxlbWVudC5zZXRCcmVha2MBAAAAAAAAAAAAAAADAAAABQAAAE8AAABzVgAAAHQAfAGDAWQBZwFrAnIWZwB8AF8Bbjx0AmQCZAOEAHwBRACDAYMBczB0A2QEgwGCAXQAdAR0BXQAfAGDAYMCgwF8AF8BfAKgBmQFZAahAnwAXwd8AFMAKQdhkgcAAAogICAgICAgIERlZmluZSBvbmUgb3IgbW9yZSBhY3Rpb25zIHRvIHBlcmZvcm0gd2hlbiBzdWNjZXNzZnVsbHkgbWF0Y2hpbmcgcGFyc2UgZWxlbWVudCBkZWZpbml0aW9uLgogICAgICAgIFBhcnNlIGFjdGlvbiBmbiBpcyBhIGNhbGxhYmxlIG1ldGhvZCB3aXRoIDAtMyBhcmd1bWVudHMsIGNhbGxlZCBhcyBgYGZuKHMsIGxvYywgdG9rcylgYCAsCiAgICAgICAgYGBmbihsb2MsIHRva3MpYGAgLCBgYGZuKHRva3MpYGAgLCBvciBqdXN0IGBgZm4oKWBgICwgd2hlcmU6CgogICAgICAgIC0gcyAgID0gdGhlIG9yaWdpbmFsIHN0cmluZyBiZWluZyBwYXJzZWQgKHNlZSBub3RlIGJlbG93KQogICAgICAgIC0gbG9jID0gdGhlIGxvY2F0aW9uIG9mIHRoZSBtYXRjaGluZyBzdWJzdHJpbmcKICAgICAgICAtIHRva3MgPSBhIGxpc3Qgb2YgdGhlIG1hdGNoZWQgdG9rZW5zLCBwYWNrYWdlZCBhcyBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBvYmplY3QKCiAgICAgICAgSWYgdGhlIGZ1bmN0aW9ucyBpbiBmbnMgbW9kaWZ5IHRoZSB0b2tlbnMsIHRoZXkgY2FuIHJldHVybiB0aGVtIGFzIHRoZSByZXR1cm4KICAgICAgICB2YWx1ZSBmcm9tIGZuLCBhbmQgdGhlIG1vZGlmaWVkIGxpc3Qgb2YgdG9rZW5zIHdpbGwgcmVwbGFjZSB0aGUgb3JpZ2luYWwuCiAgICAgICAgT3RoZXJ3aXNlLCBmbiBkb2VzIG5vdCBuZWVkIHRvIHJldHVybiBhbnkgdmFsdWUuCgogICAgICAgIElmIE5vbmUgaXMgcGFzc2VkIGFzIHRoZSBwYXJzZSBhY3Rpb24sIGFsbCBwcmV2aW91c2x5IGFkZGVkIHBhcnNlIGFjdGlvbnMgZm9yIHRoaXMKICAgICAgICBleHByZXNzaW9uIGFyZSBjbGVhcmVkLgoKICAgICAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50czoKICAgICAgICAtIGNhbGxEdXJpbmdUcnkgPSAoZGVmYXVsdD0gYGBGYWxzZWBgKSBpbmRpY2F0ZSBpZiBwYXJzZSBhY3Rpb24gc2hvdWxkIGJlIHJ1biBkdXJpbmcgbG9va2FoZWFkcyBhbmQgYWx0ZXJuYXRlIHRlc3RpbmcKCiAgICAgICAgTm90ZTogdGhlIGRlZmF1bHQgcGFyc2luZyBiZWhhdmlvciBpcyB0byBleHBhbmQgdGFicyBpbiB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuICBTZWUgOmNsYXNzOmBwYXJzZVN0cmluZyBmb3IgbW9yZQogICAgICAgIGluZm9ybWF0aW9uIG9uIHBhcnNpbmcgc3RyaW5ncyBjb250YWluaW5nIGBgPFRBQj5gYCBzLCBhbmQgc3VnZ2VzdGVkCiAg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ZXMgInBhY2tyYXQiIHBhcnNpbmcsIHdoaWNoIGFkZHMgbWVtb2l6aW5nIHRvIHRoZSBwYXJzaW5nIGxvZ2ljLgogICAgICAgICAgIFJlcGVhdGVkIHBhcnNlIGF0dGVtcHRzIGF0IHRoZSBzYW1lIHN0cmluZyBsb2NhdGlvbiAod2hpY2ggaGFwcGVucwogICAgICAgICAgIG9mdGVuIGluIG1hbnkgY29tcGxleCBncmFtbWFycykgY2FuIGltbWVkaWF0ZWx5IHJldHVybiBhIGNhY2hlZCB2YWx1ZSwKICAgICAgICAgICBpbnN0ZWFkIG9mIHJlLWV4ZWN1dGluZyBwYXJzaW5nL3ZhbGlkYXRpbmcgY29kZS4gIE1lbW9pemluZyBpcyBkb25lIG9mCiAgICAgICAgICAgYm90aCB2YWxpZCByZXN1bHRzIGFuZCBwYXJzaW5nIGV4Y2VwdGlvbnMuCgogICAgICAgICAgIFBhcmFtZXRlcnM6CgogICAgICAgICAgIC0gY2FjaGVfc2l6ZV9saW1pdCAtIChkZWZhdWx0PSBgYDEyOGBgKSAtIGlmIGFuIGludGVnZXIgdmFsdWUgaXMgcHJvdmlkZWQKICAgICAgICAgICAgIHdpbGwgbGltaXQgdGhlIHNpemUgb2YgdGhlIHBhY2tyYXQgY2FjaGU7IGlmIE5vbmUgaXMgcGFzc2VkLCB0aGVuCiAgICAgICAgICAgICB0aGUgY2FjaGUgc2l6ZSB3aWxsIGJlIHVuYm91bmRlZDsgaWYgMCBpcyBwYXNzZWQsIHRoZSBjYWNoZSB3aWxsCiAgICAgICAgICAgICBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4KCiAgICAgICAgICAgVGhpcyBzcGVlZHVwIG1heSBicmVhayBleGlzdGluZyBwcm9ncmFtcyB0aGF0IHVzZSBwYXJzZSBhY3Rpb25zIHRoYXQKICAgICAgICAgICBoYXZlIHNpZGUtZWZmZWN0cy4gIEZvciB0aGlzIHJlYXNvbiwgcGFja3JhdCBwYXJzaW5nIGlzIGRpc2FibGVkIHdoZW4KICAgICAgICAgICB5b3UgZmlyc3QgaW1wb3J0IHB5cGFyc2luZy4gIFRvIGFjdGl2YXRlIHRoZSBwYWNrcmF0IGZlYXR1cmUsIHlvdXIKICAgICAgICAgICBwcm9ncmFtIG11c3QgY2FsbCB0aGUgY2xhc3MgbWV0aG9kIDpjbGFzczpgUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YC4KICAgICAgICAgICBGb3IgYmVzdCByZXN1bHRzLCBjYWxsIGBgZW5hYmxlUGFja3JhdCgpYGAgaW1tZWRpYXRlbHkgYWZ0ZXIKICAgICAgICAgICBpbXBvcnRpbmcgcHlwYXJzaW5nLgoKICAgICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgICAgIGZyb20gcGlwLl92ZW5kb3IgaW1wb3J0IHB5cGFyc2luZwogICAgICAgICAgICAgICBweXBhcnNpbmcuUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0KCkKICAgICAgICBUTikHckQAAADaD19wYWNrcmF0RW5hYmxlZHJFAgAAclYCAAByUAIAAHJbAgAAchACAAApAdoQY2FjaGVfc2l6ZV9saW1pdHISAAAAchIAAAByEwAAANoNZW5hYmxlUGFja3JhdEoHAABzDAAAAAAbBgEGAQgBDAIMAXobUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YwMAAAAAAAAAAAAAAAgAAAAKAAAAQwAAAHPOAAAAdACgAaEAAQB8AGoCcxZ8AKADoQABAHwAagREAF0MfQN8A6ADoQABAHEcfABqBXM4fAGgBqEAfQF6PHwAoAd8AWQBoQJcAn0EfQV8AnJyfACgCHwBfAShAn0EdAmDAHQKgwAXAH0GfAagB3wBfAShAgEAVwBuUAQAdAt5xAEAfQcBAHo4dABqDHKOggBuInQNfAdkAmQDgwNkA3UBcqx8AKAOfAdqD6EBfAdfD3wHggFXAFkAZAN9B34Hbg5kA30HfgcwADAAfAVTAGQDUwApBGH7BQAACiAgICAgICAgRXhlY3V0ZSB0aGUgcGFyc2UgZXhwcmVzc2lvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuCiAgICAgICAgVGhpcyBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgdG8gdGhlIGNsaWVudCBjb2RlLCBvbmNlIHRoZSBjb21wbGV0ZQogICAgICAgIGV4cHJlc3Npb24gaGFzIGJlZW4gYnVpbHQuCgogICAgICAgIFJldHVybnMgdGhlIHBhcnNlZCBkYXRhIGFzIGEgOmNsYXNzOmBQYXJzZVJlc3VsdHNgIG9iamVjdCwgd2hpY2ggbWF5IGJlCiAgICAgICAgYWNjZXNzZWQgYXMgYSBsaXN0LCBvciBhcyBhIGRpY3Qgb3Igb2JqZWN0IHdpdGggYXR0cmlidXRlcyBpZiB0aGUgZ2l2ZW4gcGFyc2VyCiAgICAgICAgaW5jbHVkZXMgcmVzdWx0cyBuYW1lcy4KCiAgICAgICAgSWYgeW91IHdhbnQgdGhlIGdyYW1tYXIgdG8gcmVxdWlyZSB0aGF0IHRoZSBlbnRpcmUgaW5wdXQgc3RyaW5nIGJlCiAgICAgICAgc3VjY2Vzc2Z1bGx5IHBhcnNlZCwgdGhlbiBzZXQgYGBwYXJzZUFsbGBgIHRvIFRydWUgKGVxdWl2YWxlbnQgdG8gZW5kaW5nCiAgICAgICAgdGhlIGdyYW1tYXIgd2l0aCBgYFN0cmluZ0VuZCgpYGApLgoKICAgICAgICBOb3RlOiBgYHBhcnNlU3RyaW5nYGAgaW1wbGljaXRseSBjYWxscyBgYGV4cGFuZHRhYnMoKWBgIG9uIHRoZSBpbnB1dCBzdHJpbmcsCiAgICAgICAgaW4gb3JkZXIgdG8gcmVwb3J0IHByb3BlciBjb2x1bW4gbnVtYmVycyBpbiBwYXJzZSBhY3Rpb25zLgogICAgICAgIElmIHRoZSBpbnB1dCBzdHJpbmcgY29udGFpbnMgdGFicyBhbmQKICAgICAgICB0aGUgZ3JhbW1hciB1c2VzIHBhcnNlIGFjdGlvbnMgdGhhdCB1c2UgdGhlIGBgbG9jYGAgYXJndW1lbnQgdG8gaW5kZXggaW50byB0aGUKICAgICAgICBzdHJpbmcgYmVpbmcgcGFyc2VkLCB5b3UgY2FuIGVuc3VyZSB5b3UgaGF2ZSBhIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgaW5wdXQKICAgICAgICBzdHJpbmcgYnk6CgogICAgICAgIC0gY2FsbGluZyBgYHBhcnNlV2l0aFRhYnNgYCBvbiB5b3VyIGdyYW1tYXIgYmVmb3JlIGNhbGxpbmcgYGBwYXJzZVN0cmluZ2BgCiAgICAgICAgICAoc2VlIDpjbGFzczpgcGFyc2VXaXRoVGFi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bmcoc291cmNlKToKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArICdeJyooZW5kLXN0YXJ0KSkKICAgICAgICAgICAgICAgIHByaW50KCcgJypzdGFydCArIHRva2Vuc1swXSkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIHNsZGpmMTIzbHNkamprZjM0NXNsZGtqZjg3OWxranNmZDk4NwogICAgICAgICAgICBeXl5eXgogICAgICAgICAgICBzbGRqZgogICAgICAgICAgICAgICAgICAgIF5eXl5eXl4KICAgICAgICAgICAgICAgICAgICBsc2RqamtmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGRramYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxranNmZAogICAgICAgIHIBAAAARqkBcgsCAAByrAAAAHL6AAAATikRcvQBAAByYQIAAHLyAQAAcvEBAAByqAAAAHJiAgAActsAAAByJAIAAHIQAgAAckQAAAByXAIAAHI/AAAAcj0AAAByYwIAAHLbAQAAcucBAABy+gAAACkPctAAAAByvQEAANoKbWF4TWF0Y2hlc9oHb3ZlcmxhcHIeAgAAciMCAAByzAAAANoKcHJlcGFyc2VGbtoHcGFyc2VGbtoHbWF0Y2hlc3IuAgAA2gduZXh0TG9jcjACAADaB25leHRsb2NyAgEAAHISAAAAchIAAAByEwAAANoKc2NhblN0cmluZ6cHAABzRgAAAAAfBgEIAQoBCgIGAQwBCAEEAQYBBgEIAQQBAgEQAQIBCgEWAQwBDgIIAQgBDAEEAQoBCAEGAgoCBgIOARABCAEEAxIBDgF6GFBhcnNlckVsZW1lbnQuc2NhblN0cmluZ2MCAAAAAAAAAAAAAAAIAAAACgAAAEMAAABzAAEAAGcAfQJkAX0DZAJ8AF8Aepx8AKABfAGhAUQAXVpcA30EfQV9BnwCoAJ8AXwDfAWFAhkAoQEBAHwEcnB0A3wEdASDAnJSfAJ8BKAFoQA3AH0Cbh50A3wEdAaDAnJmfAJ8BDcAfQJuCnwCoAJ8BKEBAQB8Bn0DcRp8AqACfAF8A2QDhQIZAKEBAQBkBGQFhAB8AkQAgwF9AmQGoAd0CHQJdAp8AoMBgwKhAVcAUwAEAHQLefoBAH0HAQB6OHQMag1yxIIAbiJ0DnwHZAdkA4MDZAN1AXLifACgD3wHahChAXwHXxB8B4IBVwBZAGQDfQd+B24KZAN9B34HMAAwAGQDUwApCGFbAwAACiAgICAgICAgRXh0ZW5zaW9uIHRvIDpjbGFzczpgc2NhblN0cmluZ2AsIHRvIG1vZGlmeSBtYXRjaGluZyB0ZXh0IHdpdGggbW9kaWZpZWQgdG9rZW5zIHRoYXQgbWF5CiAgICAgICAgYmUgcmV0dXJuZWQgZnJvbSBhIHBhcnNlIGFjdGlvbi4gIFRvIHVzZSBgYHRyYW5zZm9ybVN0cmluZ2BgLCBkZWZpbmUgYSBncmFtbWFyIGFuZAogICAgICAgIGF0dGFjaCBhIHBhcnNlIGFjdGlvbiB0byBpdCB0aGF0IG1vZGlmaWVzIHRoZSByZXR1cm5lZCB0b2tlbiBsaXN0LgogICAgICAgIEludm9raW5nIGBgdHJhbnNmb3JtU3RyaW5nKClgYCBvbiBhIHRhcmdldCBzdHJpbmcgd2lsbCB0aGVuIHNjYW4gZm9yIG1hdGNoZXMsCiAgICAgICAgYW5kIHJlcGxhY2UgdGhlIG1hdGNoZWQgdGV4dCBwYXR0ZXJucyBhY2NvcmRpbmcgdG8gdGhlIGxvZ2ljIGluIHRoZSBwYXJzZQogICAgICAgIGFjdGlvbi4gIGBgdHJhbnNmb3JtU3RyaW5nKClgYCByZXR1cm5zIHRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgc3RyaW5nLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIHdkID0gV29yZChhbHBoYXMpCiAgICAgICAgICAgIHdkLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0b2tzOiB0b2tzWzBdLnRpdGxlKCkpCgogICAgICAgICAgICBwcmludCh3ZC50cmFuc2Zvcm1TdHJpbmcoIm5vdyBpcyB0aGUgd2ludGVyIG9mIG91ciBkaXNjb250ZW50IG1hZGUgZ2xvcmlvdXMgc3VtbWVyIGJ5IHRoaXMgc3VuIG9mIHlvcmsuIikpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBOb3cgSXMgVGhlIFdpbnRlciBPZiBPdXIgRGlzY29udGVudCBNYWRlIEdsb3Jpb3VzIFN1bW1lciBCeSBUaGlzIFN1biBPZiBZb3JrLgogICAgICAgIHIBAAAAVE5jAQAAAAAAAAAAAAAAAgAAAAMAAABTAAAAcxQAAABnAHwAXQx9AXwBcgR8AZECcQRTAHISAAAAchIAAACpAnIXAAAA2gFvchIAAAByEgAAAHITAAAAchkAAAAWCAAAchQAAAB6MVBhcnNlckVsZW1lbnQudHJhbnNmb3JtU3RyaW5nLjxsb2NhbHM+LjxsaXN0Y29tcD5yuwAAAHL6AAAAKRFy8QEAAHJvAgAAcvcAAABynQAAAHJCAAAAciIBAAByKgEAAHLiAAAAchUCAAByqAAAANoIX2ZsYXR0ZW5yPQAAAHJEAAAAcmMCAABy2wEAAHLnAQAAcvoAAAApCHLQAAAAcr0BAABygAEAANoFbGFzdEVymwAAAHKvAAAAch4CAAByAgEAAHISAAAAchIAAAByEwAAAHKlAAAA8QcAAHMsAAAAABQEAQQDBgECARQBEgEEAQoBDgEKAQoCCgEGARIBDgEWAQ4BBgEEAxABDgF6HVBhcnNlckVsZW1lbnQudHJhbnNmb3JtU3RyaW5nYwMAAAAAAAAAAAAAAAQAAAAKAAAAQwAAAHNyAAAAehx0AGQBZAKEAHwAoAF8AXwCoQJEAIMBgwFXAFMABAB0AnlsAQB9AwEAejh0A2oEcjaCAG4idAV8A2QDZASDA2QEdQFyVHwAoAZ8A2oHoQF8A18HfAOCAVcAWQBkBH0DfgNuCmQEfQN+AzAAMABkBFMAKQVhoAMAAAogICAgICAgIEFub3RoZXIgZXh0ZW5zaW9uIHRvIDpjbGFzczpgc2NhblN0cmluZ2AsIHNpbXBsaWZ5aW5nIHRoZSBhY2Nlc3MgdG8gdGhlIHRva2VucyBmb3VuZAogICAgICAgIHRvIG1hdGNoIHRoZSBnaXZlbiBwYXJzZSBleHByZXNzaW9uLiAgTWF5IGJlIGNhbGxlZCB3aXRoIG9wdGlvbmFsCiAgICAgICAgYGBtYXhNYXRjaGVzYGAgYXJndW1lbnQsIHRvIGNsaXAgc2VhcmNoaW5nIGFmdGVyICduJyBtYXRjaGVzIGFyZSBmb3VuZC4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICAjIGEgY2FwaXRhbGl6ZWQgd29yZCBzdGFydHMgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyLCBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgbG93ZXJjYXNlIGxldHRlcnMKICAgICAgICAgICAgY2FwX3dvcmQgPSBXb3JkKGFscGhhcy51cHBlcigpLCBhbHBoYXMubG93ZXIoKSkKCiAgICAgICAgICAgIHByaW50KGNhcF93b3JkLnNlYXJjaFN0cmluZygiTW9yZSB0aGFuIElyb24sIG1vcmUgdGhhbiBMZWFkLCBtb3JlIHRoYW4gR29sZCBJIG5lZWQgRWxlY3RyaWNpdHkiKSkKCiAgICAgICAgICAgICMgdGhlIHN1bSgpIGJ1aWx0aW4gY2FuIGJlIHVzZWQgdG8gbWVyZ2UgcmVzdWx0cyBpbnRvIGEgc2luZ2xlIFBhcnNlUmVzdWx0cyBvYmplY3QKICAgICAgICAgICAgcHJpbnQoc3VtKGNhcF93b3JkLnNlYXJjaFN0cmluZygiTW9yZSB0aGFuIElyb24sIG1vcmUgdGhhbiBMZWFkLCBtb3JlIHRoYW4gR29sZCBJIG5lZWQgRWxlY3RyaWNpdHkiKSkpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBbWydNb3JlJ10sIFsnSXJvbiddLCBbJ0xlYWQnXSwgWydHb2xkJ10sIFsnSSddLCBbJ0VsZWN0cmljaXR5J11dCiAgICAgICAgICAgIFsnTW9yZScsICdJcm9uJywgJ0xlYWQnLCAnR29sZCcsICdJJywgJ0VsZWN0cmljaXR5J10KICAgICAgICBjAQAAAAAAAAAAAAAABAAAAAUAAABTAAAAcxYAAABnAHwAXQ5cA30BfQJ9A3wBkQJxBFMAchIAAAByEgAAACkEchcAAABymwAAAHKvAAAAch4CAAByEgAAAHISAAAAchMAAAByGQAAADcIAAByFAAAAHouUGFyc2VyRWxlbWVudC5zZWFyY2hTdHJpbmcuPGxvY2Fscz4uPGxpc3Rjb21wPnL6AAAATikIckIAAABybwIAAHI9AAAAckQAAAByYwIAAHLbAQAAcucBAABy+gAAACkEctAAAAByvQEAAHJoAgAAcgIBAAByEgAAAHISAAAAchMAAADaDHNlYXJjaFN0cmluZyEIAABzEAAAAAAVAgEcAQ4BBgEEAxABDgF6GlBhcnNlckVsZW1lbnQuc2VhcmNoU3RyaW5nYwQAAAAAAAAAAAAAAAkAAAAEAAAAYwAAAHNUAAAAZAF9BGQBfQV8AGoAfAF8AmQCjQJEAF0qXAN9Bn0HfQh8AXwFfAeFAhkAVgABAHwDcjx8BmQBGQBWAAEAfAh9BXEWfAF8BWQDhQIZAFYAAQBkA1MAKQRhUgIAAAogICAgICAgIEdlbmVyYXRvciBtZXRob2QgdG8gc3BsaXQgYSBzdHJpbmcgdXNpbmcgdGhlIGdpdmVuIGV4cHJlc3Npb24gYXMgYSBzZXBhcmF0b3IuCiAgICAgICAgTWF5IGJlIGNhbGxlZCB3aXRoIG9wdGlvbmFsIGBgbWF4c3BsaXRgYCBhcmd1bWVudCwgdG8gbGltaXQgdGhlIG51bWJlciBvZiBzcGxpdHM7CiAgICAgICAgYW5kIHRoZSBvcHRpb25hbCBgYGluY2x1ZGVTZXBhcmF0b3JzYGAgYXJndW1lbnQgKGRlZmF1bHQ9IGBgRmFsc2VgYCksIGlmIHRoZSBzZXBhcmF0aW5nCiAgICAgICAgbWF0Y2hpbmcgdGV4dCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHNwbGl0IHJlc3VsdHMuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgcHVuYyA9IG9uZU9mKGxpc3QoIi4sOzovLSE/IikpCiAgICAgICAgICAgIHByaW50KGxpc3QocHVuYy5zcGxpdCgiVGhpcywgdGhpcz8sIHRoaXMgc2VudGVuY2UsIGlzIGJhZGx5IHB1bmN0dWF0ZWQhIikpKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgWydUaGlzJywgJyB0aGlzJywgJycsICcgdGhpcyBzZW50ZW5jZScsICcgaXMgYmFkbHkgcHVuY3R1YXRlZCcsICcnXQogICAgICAgIHIBAAAAKQFyaAIAAE4pAXJvAgAAKQly0AAAAHK9AQAA2ghtYXhzcGxpdNoRaW5jbHVkZVNlcGFyYXRvcnPaBnNwbGl0c9oEbGFzdHKbAAAAcq8AAAByHgIAAHISAAAAchIAAAByEwAAAHKwAAAAQQgAAHMQAAAAABAEAQQBGAEOAQQBCgEGAXoTUGFyc2VyRWxlbWVudC5zcGxpdGMCAAAAAAAAAAAAAAACAAAABQAAAEMAAABzVgAAAHwBdAB1AHIQdAF8AIMBUwB0AnwBdAODAnIkfACgBHwBoQF9AXQCfAF0BYMCc0p0BmoHZAF0CHwBgwEWAHQJZAJkA40DAQBkBFMAdAp8AHwBZwKDAVMAKQVhWwMAAAogICAgICAgIEltcGxlbWVudGF0aW9uIG9mICsgb3BlcmF0b3IgLSByZXR1cm5zIDpjbGFzczpgQW5kYC4gQWRkaW5nIHN0cmluZ3MgdG8gYSBQYXJzZXJFbGVtZW50CiAgICAgICAgY29udmVydHMgdGhlbSB0byA6Y2xhc3M6YExpdGVyYWxgcyBieSBkZWZhdWx0LgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGdyZWV0ID0gV29yZChhbHBoYXMpICsgIiwiICsgV29yZChhbHBoYXMpICsgIiEiCiAgICAgICAgICAgIGhlbGxvID0gIkhlbGxvLCBXb3JsZCEiCiAgICAgICAgICAgIHByaW50IChoZWxsbywgIi0+IiwgZ3JlZXQucGFyc2VTdHJpbmcoaGVsbG8pKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgSGVsbG8sIFdvcmxkISAtPiBbJ0hlbGxvJywgJywnLCAnV29ybGQnLCAnISddCgogICAgICAgIGBgLi4uYGAgbWF5IGJlIHVzZWQgYXMgYSBwYXJzZSBleHByZXNzaW9uIGFzIGEgc2hvcnQgZm9ybSBvZiA6Y2xhc3M6YFNraXBUb2AuCgogICAgICAgICAgICBMaXRlcmFsKCdzdGFydCcpICsgLi4uICsgTGl0ZXJhbCgnZW5kJykKCiAgICAgICAgaXMgZXF1aXZhbGVudCB0bzoKCiAgICAgICAgICAgIExpdGVyYWwoJ3N0YXJ0JykgKyBTa2lwVG8oJ2VuZCcpKCJfc2tpcHBlZCoiKSArIExpdGVyYWwoJ2VuZCcpCgogICAgICAgIE5vdGUgdGhhdCB0aGUgc2tpcHBlZCB0ZXh0IGlzIHJldHVybmVkIHdpdGggJ19za2lwcGVkJyBhcyBhIHJlc3VsdHMgbmFtZSwKICAgICAgICBhbmQgdG8gc3VwcG9ydCBoYXZpbmcgbXVsdGlwbGUgc2tpcHMgaW4gdGhlIHNhbWUgcGFyc2VyLCB0aGUgdmFsdWUgcmV0dXJuZWQgaXMKICAgICAgICBhIGxpc3Qgb2YgYWxsIHNraXBwZWQgdGV4dC4KICAgICAgICD6NENhbm5vdCBjb21iaW5lIGVsZW1lbnQgb2YgdHlwZSAlcyB3aXRoIFBhcnNlckVsZW1lbnRylgAAAKkB2gpzdGFja2xldmVsTikL2ghFbGxpcHNpc9oMX1BlbmRpbmdTa2lwcp0AAAByLwEAAHLjAQAAckQAAADaCHdhcm5pbmdz2gR3YXJucukAAADaDVN5bnRheFdhcm5pbmdyJQAAAHJ4AQAAchIAAAByEgAAAHITAAAAcm4BAABaCAAAcxQAAAAAGwgBCAIKAQoBCgEOAQT/BgIEAXoVUGFyc2VyRWxlbWVudC5fX2FkZF9fYwIAAAAAAAAAAAAAAAIAAAAFAAAAQwAAAHNaAAAAfAF0AHUAchh0AXwAgwFkAYMBfAAXAFMAdAJ8AXQDgwJyLHwAoAR8AaEBfQF0AnwBdAWDAnNSdAZqB2QCdAh8AYMBFgB0CWQDZASNAwEAZAVTAHwBfAAXAFMAKQZ6YAogICAgICAgIEltcGxlbWVudGF0aW9uIG9mICsgb3BlcmF0b3Igd2hlbiBsZWZ0IG9wZXJhbmQgaXMgbm90IGEgOmNsYXNzOmBQYXJzZXJFbGVtZW50YAogICAgICAgIPoJX3NraXBwZWQqcnkCAABylgAAAHJ6AgAATikKcnwCAABySAAAAHKdAAAAci8BAABy4wEAAHJEAAAAcn4CAAByfwIAAHLpAAAAcoACAAByeAEAAHISAAAAchIAAAByEwAAAHJ5AQAAgAgAAHMUAAAAAAQIARACCgEKAQoBDgEE/wYCBAF6FlBhcnNlckVsZW1lbnQuX19yYWRkX19jAgAAAAAAAAAAAAAAAgAAAAUAAABDAAAAc0oAAAB0AHwBdAGDAnIUfACgAnwBoQF9AXQAfAF0A4MCczp0BGoFZAF0BnwBgwEWAHQHZAJkA40DAQBkBFMAfAB0CKAJoQAXAHwBFwBTACkFelQKICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiAtIG9wZXJhdG9yLCByZXR1cm5zIDpjbGFzczpgQW5kYCB3aXRoIGVycm9yIHN0b3AKICAgICAgICByeQIAAHKWAAAAcnoCAABOKQpynQAAAHIvAQAAcuMBAAByRAAAAHJ+AgAAcn8CAABy6QAAAHKAAgAAciUAAADaCl9FcnJvclN0b3ByeAEAAHISAAAAchIAAAByEwAAANoHX19zdWJfX48IAABzEAAAAAAECgEKAQoBDgEE/wYCBAF6FVBhcnNlckVsZW1lbnQuX19zdWJfX2MCAAAAAAAAAAAAAAACAAAABQAAAEMAAABzQgAAAHQAfAF0AYMCchR8AKACfAGhAX0BdAB8AXQDgwJzOnQEagVkAXQGfAGDARYAdAdkAmQDjQMBAGQEUwB8AXwAGABTACkFemAKICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiAtIG9wZXJhdG9yIHdoZW4gbGVmdCBvcGVyYW5kIGlzIG5vdCBhIDpjbGFzczpgUGFyc2VyRWxlbWVudGAKICAgICAgICByeQIAAHKWAAAAcnoCAABOqQhynQAAAHIvAQAAcuMBAAByRAAAAHJ+AgAAcn8CAABy6QAAAHKAAgAAcngBAAByEgAAAHISAAAAchMAAADaCF9fcnN1Yl9fmwgAAHMQAAAAAAQKAQoBCgEOAQT/BgIEAXoWUGFyc2VyRWxlbWVudC5fX3JzdWJfX2MCAAAAAAAAAAAAAAAFAAAABgAAAAMAAABzFgIAAHwBdAB1AHIOZAF9AW44dAF8AXQCgwJyRnwBZAJkA4UCGQB0AGYBawJyRmQEfAFkA2QChQIZABcAZAUXAGQCZAaFAhkAfQF0AXwBdAODAnJcfAFkBwIAfQJ9A278dAF8AXQCgwKQAXJKdAJkCGQJhAB8AUQAgwGDAX0BfAFkChcAZAJkBoUCGQB9AXwBZAcZAGQCdQByomQHfAFkAxkAZgJ9AXQBfAFkBxkAdAODAnL6fAFkAxkAZAJ1AHL6fAFkBxkAZAdrAnLQdASIAYMBUwB8AWQHGQBkA2sCcuR0BYgBgwFTAIgBfAFkBxkAFAB0BIgBgwEXAFMAbk50AXwBZAcZAHQDgwKQAXIsdAF8AWQDGQB0A4MCkAFyLHwBXAJ9An0DfAN8AjgAfQNuHHQGZAt0B3wBZAcZAIMBdAd8AWQDGQCDAYMDggFuDnQGZAx0B3wBgwGDAoIBfAJkB2sAkAFyanQIZA2DAYIBfANkB2sAkAFyfHQIZA6DAYIBfAJ8AwQAAwBrApABcpRkB2sCkAFyoG4EAQBuCHQIZA+DAYIBfAOQAXL0hwCHAWYCZBBkEYQIiQB8ApABcup8AmQDawKQAXLSiAGIAHwDgwEXAH0EbhZ0CYgBZwF8AhQAgwGIAHwDgwEXAH0EbgiIAHwDgwF9BG4efAJkA2sCkAJyBIgBfQRuDnQJiAFnAXwCFACDAX0EfARTACkSYfgDAAAKICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiAqIG9wZXJhdG9yLCBhbGxvd3MgdXNlIG9mIGBgZXhwciAqIDNgYCBpbiBwbGFjZSBvZgogICAgICAgIGBgZXhwciArIGV4cHIgKyBleHByYGAuICBFeHByZXNzaW9ucyBtYXkgYWxzbyBtZSBtdWx0aXBsaWVkIGJ5IGEgMi1pbnRlZ2VyCiAgICAgICAgdHVwbGUsIHNpbWlsYXIgdG8gYGB7bWluLCBtYXh9YGAgbXVsdGlwbGllcnMgaW4gcmVndWxhciBleHByZXNzaW9ucy4gIFR1cGxlcwogICAgICAgIG1heSBhbHNvIGluY2x1ZGUgYGBOb25lYGAgYXMgaW46CiAgICAgICAgIC0gYGBleHByKihuLCBOb25lKWBgIG9yIGBgZXhwcioobiwgKWBgIGlzIGVxdWl2YWxlbnQKICAgICAgICAgICAgICB0byBgYGV4cHIqbiArIFplcm9Pck1vcmUoZXhwcilgYAogICAgICAgICAgICAgIChyZWFkIGFzICJhdCBsZWFzdCBuIGluc3RhbmNlcyBvZiBgYGV4cHJgYCIpCiAgICAgICAgIC0gYGBleHByKihOb25lLCBuKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBleHByKigwLCBuKWBgCiAgICAgICAgICAgICAgKHJlYWQgYXMgIjAgdG8gbiBpbnN0YW5jZXMgb2YgYGBleHByYGAiKQogICAgICAgICAtIGBgZXhwciooTm9uZSwgTm9uZSlgYCBpcyBlcXVpdmFsZW50IHRvIGBgWmVyb09yTW9yZShl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IFdvcmQobnVtcykuc2V0TmFtZSgibnVtd29yZCIpCiAgICAgICAgICAgIHRlcm0gPSB3ZCB8IGludGVnZXIKCiAgICAgICAgICAgICMgdHVybiBvbiBkZWJ1Z2dpbmcgZm9yIHdkCiAgICAgICAgICAgIHdkLnNldERlYnVnKCkKCiAgICAgICAgICAgIE9uZU9yTW9yZSh0ZXJtKS5wYXJzZVN0cmluZygiYWJjIDEyMyB4eXogODkwIikKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMCgxLDEpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsnYWJjJ10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAzKDEsNCkKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgNCksIChsaW5lOjEsIGNvbDo1KQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDcoMSw4KQogICAgICAgICAgICBNYXRjaGVkIGFscGhhd29yZCAtPiBbJ3h5eiddCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTEoMSwxMikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTIpLCAobGluZToxLCBjb2w6MTMpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTUoMSwxNikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTUpLCAobGluZToxLCBjb2w6MTYpCgogICAgICAgIFRoZSBvdXRwdXQgc2hvd24gaXMgdGhhdCBwcm9kdWNlZCBieSB0aGUgZGVmYXVsdCBkZWJ1ZyBhY3Rpb25zIC0gY3VzdG9tIGRlYnVnIGFjdGlvbnMgY2FuIGJlCiAgICAgICAgc3BlY2lmaWVkIHVzaW5nIDpjbGFzczpgc2V0RGVidWdBY3Rpb25zYC4gUHJpb3IgdG8g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IHdoZW4gcnVubmluZyB0ZXN0cwogICAgICAgICAtIGNvbW1lbnQgLSAoZGVmYXVsdD0gYGAnIydgYCkgLSBleHByZXNzaW9uIGZvciBpbmRpY2F0aW5nIGVtYmVkZGVkIGNvbW1lbnRzIGluIHRoZSB0ZXN0CiAgICAgICAgICAgICAgc3RyaW5nOyBwYXNzIE5vbmUgdG8gZGlzYWJsZSBjb21tZW50IGZpbHRlcmluZwogICAgICAgICAtIGZ1bGxEdW1wIC0gKGRlZmF1bHQ9IGBgVHJ1ZWBgKSAtIGR1bXAgcmVzdWx0cyBhcyBsaXN0IGZvbGxvd2VkIGJ5IHJlc3VsdHMgbmFtZXMgaW4gbmVzdGVkIG91dGxpbmU7CiAgICAgICAgICAgICAgaWYgRmFsc2UsIG9ubHkgZHVtcCBuZXN0ZWQgbGlzdAogICAgICAgICAtIHByaW50UmVzdWx0cyAtIChkZWZhdWx0PSBgYFRydWVgYCkgcHJpbnRzIHRlc3Qgb3V0cHV0IHRvIHN0ZG91dAogICAgICAgICAtIGZhaWx1cmVUZXN0cyAtIChkZWZhdWx0PSBgYEZhbHNlYGApIGluZGljYXRlcyBpZiB0aGVzZSB0ZXN0cyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCBwYXJzaW5nCiAgICAgICAgIC0gcG9zdFBhcnNlIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSBvcHRpb25hbCBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBwYXJzZSByZXN1bHRzOyBjYWxsZWQgYXMKICAgICAgICAgICAgICBgZm4odGVzdF9zdHJpbmcsIHBhcnNlX3Jlc3VsdHMpYCBhbmQgcmV0dXJucyBhIHN0cmluZyB0byBiZSBhZGRlZCB0byB0aGUgdGVzdCBvdXRwdXQKICAgICAgICAgLSBmaWxlIC0gKGRlZmF1bHQ9YGBOb25lYGApIG9wdGlvbmFsIGZpbGUtbGlrZSBvYmplY3QgdG8gd2hpY2ggdGVzdCBvdXRwdXQgd2lsbCBiZSB3cml0dGVuOwogICAgICAgICAgICAgIGlmIE5vbmUsIHdpbGwgZGVmYXVsdCB0byBgYHN5cy5zdGRvdXRgYAoKICAgICAgICBSZXR1cm5zOiBhIChzdWNjZXNzLCByZXN1bHRzKSB0dXBsZSwgd2hlcmUgc3VjY2VzcyBpbmRpY2F0ZXMgdGhhdCBhbGwgdGVzdHMgc3VjY2VlZGVkCiAgICAgICAgKG9yIGZhaWxlZCBpZiBgYGZhaWx1cmVUZXN0c2BgIGlzIFRydWUpLCBhbmQgdGhlIHJlc3VsdHMgY29udGFpbiBhIGxpc3Qgb2YgbGluZXMgb2YgZWFjaAogICAgICAgIHRlc3QncyBvdXRwdXQKCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBudW1iZXJfZXhwciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyLmNvcHkoKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgICAgIDEwMAogICAgICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgICAgICcnJykKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgICcnJywgZmFpbHVyZVRlc3RzPVRydWUpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIFsxMDBdCgogICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICBbLTEwMF0KCiAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICBbMWUtMTJdCgogICAgICAgICAgICBTdWNjZXNzCgogICAgICAgICAgICAjIHN0cmF5IGNoYXJhY3RlcgogICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgMyksIChsaW5lOjEsIGNvbDo0KQoKICAgICAgICAgICAgIyBtaXNzaW5nIGxlYWRpbmcgZGlnaXQgYmVmb3JlICcuJwogICAgICAgICAgICAtLjEwMAogICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIHtyZWFsIG51bWJlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24gfCByZWFsIG51bWJlciB8IHNpZ25lZCBpbnRlZ2VyfSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCgogICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAzLjE0LjE1OQogICAgICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciA0KSwgKGxpbmU6MSwgY29sOjUpCgogICAgICAgICAg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cmFsYCB3aGljaCBtYXRjaGVzICJjbG9zZSIgbWF0Y2hlcywKICAgIHRoYXQgaXMsIHN0cmluZ3Mgd2l0aCBhdCBtb3N0ICduJyBtaXNtYXRjaGluZyBjaGFyYWN0ZXJzLgogICAgOmNsYXNzOmBDbG9zZU1hdGNoYCB0YWtlcyBwYXJhbWV0ZXJzOgoKICAgICAtIGBgbWF0Y2hfc3RyaW5nYGAgLSBzdHJpbmcgdG8gYmUgbWF0Y2hlZAogICAgIC0gYGBtYXhNaXNtYXRjaGVzYGAgLSAoYGBkZWZhdWx0PTFgYCkgbWF4aW11bSBudW1iZXIgb2YKICAgICAgIG1pc21hdGNoZXMgYWxsb3dlZCB0byBjb3VudCBhcyBhIG1hdGNoCgogICAgVGhlIHJlc3VsdHMgZnJvbSBhIHN1Y2Nlc3NmdWwgcGFyc2Ugd2lsbCBjb250YWluIHRoZSBtYXRjaGVkIHRleHQKICAgIGZyb20gdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIGZvbGxvd2luZyBuYW1lZCByZXN1bHRzOgoKICAgICAtIGBgbWlzbWF0Y2hlc2BgIC0gYSBsaXN0IG9mIHRoZSBwb3NpdGlvbnMgd2l0aGluIHRoZQogICAgICAgbWF0Y2hfc3RyaW5nIHdoZXJlIG1pc21hdGNoZXMgd2VyZSBmb3VuZAogICAgIC0gYGBvcmlnaW5hbGBgIC0gdGhlIG9yaWdpbmFsIG1hdGNoX3N0cmluZyB1c2VkIHRvIGNvbXBhcmUKICAgICAgIGFnYWluc3QgdGhlIGlucHV0IHN0cmluZwoKICAgIElmIGBgbWlzbWF0Y2hlc2BgIGlzIGFuIGVtcHR5IGxpc3QsIHRoZW4gdGhlIG1hdGNoIHdhcyBhbiBleGFjdAogICAgbWF0Y2guCgogICAgRXhhbXBsZTo6CgogICAgICAgIHBhdHQgPSBDbG9zZU1hdGNoKCJBVENBVENHQUFUR0dBIikKICAgICAgICBwYXR0LnBhcnNlU3RyaW5nKCJBVENBVENHQUFYR0dBIikgIyAtPiAoWydBVENBVENHQUFYR0dBJ10sIHsnbWlzbWF0Y2hlcyc6IFtbOV1dLCAnb3JpZ2luYWwnOiBbJ0FUQ0FUQ0dBQVRHR0EnXX0pCiAgICAgICAgcGF0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IChhIG1pbmltdW0gdmFsdWUgPCAxIGlzIG5vdCB2YWxpZCk7IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IKICAgIGBgbWF4YGAgYW5kIGBgZXhhY3RgYCBhcmUgMCwgbWVhbmluZyBubyBtYXhpbXVtIG9yIGV4YWN0CiAgICBsZW5ndGggcmVzdHJpY3Rpb24uIEFuIG9wdGlvbmFsIGBgZXhjbHVkZUNoYXJzYGAgcGFyYW1ldGVyIGNhbgogICAgbGlzdCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUgZm91bmQgaW4gdGhlIGlucHV0IGBgYm9keUNoYXJzYGAKICAgIHN0cmluZzsgdXNlZnVsIHRvIGRlZmluZSBhIHdvcmQgb2YgYWxsIHByaW50YWJsZXMgZXhjZXB0IGZvciBvbmUgb3IKICAgIHR3byBjaGFyYWN0ZXJzLCBmb3IgaW5zdGFuY2UuCgogICAgOmNsYXNzOmBzcmFuZ2VgIGlzIHVzZWZ1bCBmb3IgZGVmaW5pbmcgY3VzdG9tIGNoYXJhY3RlciBzZXQgc3RyaW5ncwogICAgZm9yIGRlZmluaW5nIGBgV29yZGBgIGV4cHJlc3Npb25zLCB1c2luZyByYW5nZSBub3RhdGlvbiBmcm9tCiAgICByZWd1bGFyIGV4cHJlc3Npb24gY2hhcmFjdGVyIHNldHMuCgogICAgQSBjb21tb24gbWlzdGFrZSBpcyB0byB1c2UgOmNsYXNzOmBXb3JkYCB0byBtYXRjaCBhIHNwZWNpZmljIGxpdGVyYWwKICAgIHN0cmluZywgYXMgaW4gYGBXb3JkKCJBZGRyZXNzIilgYC4gUmVtZW1iZXIgdGhhdCA6Y2xhc3M6YFdvcmRgCiAgICB1c2VzIHRoZSBzdHJpbmcgYXJndW1lbnQgdG8gZGVmaW5lICpzZXRzKiBvZiBtYXRjaGFibGUgY2hhcmFjdGVycy4KICAgIFRoaXMgZXhwcmVzc2lvbiB3b3VsZCBtYXRjaCAiQWRkIiwgIkFBQSIsICJkQXJlZCIsIG9yIGFueSBvdGhlciB3b3JkCiAgICBtYWRlIHVwIG9mIHRoZSBjaGFyYWN0ZXJzICdBJywgJ2QnLCAncicsICdlJywgYW5kICdzJy4gVG8gbWF0Y2ggYW4KICAgIGV4YWN0IGxpdGVyYWwgc3RyaW5nLCB1c2UgOmNsYXNzOmBMaXRlcmFsYCBvciA6Y2xhc3M6YEtleXdvcmRgLgoKICAgIHB5cGFyc2luZyBpbmNsdWRlcyBoZWxwZXIgc3RyaW5ncyBmb3IgYnVpbGRpbmcgV29yZHM6CgogICAgIC0gOmNsYXNzOmBhbHBoYXNgCiAgICAgLSA6Y2xhc3M6YG51bXNgCiAgICAgLSA6Y2xhc3M6YGFscGhhbnVtc2AKICAgICAtIDpjbGFzczpgaGV4bnVtc2AKICAgICAtIDpjbGFzczpgYWxwaGFzOGJpdGAgKGFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1CiAgICAgICAtIGFjY2VudGVkLCB0aWxkZWQsIHVtbGF1dGVkLCBldGMuKQogICAgIC0gOmNsYXNzOmBwdW5jOGJpdGAgKG5vbi1hbHBoYWJldGljIGNoYXJhY3RlcnMgaW4gQVNDSUkgcmFuZ2UKICAgICAgIDEyOC0yNTUgLSBjdXJyZW5jeSwgc3ltYm9scywgc3VwZXJzY3JpcHRzLCBkaWFjcml0aWNhbHMsIGV0Yy4pCiAgICAgLSA6Y2xhc3M6YHByaW50YWJsZXNgIChhbnkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyKQoKICAgIEV4YW1wbGU6OgoKICAgICAgICAjIGEgd29yZCBjb21wb3NlZCBvZiBkaWdpdHMKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKSAjIGVxdWl2YWxlbnQgdG8gV29yZCgiMDEyMzQ1Njc4OSIpIG9yIFdvcmQoc3JhbmdlKCIwLTkiKSkKCiAgICAgICAgIyBhIHdvcmQgd2l0aCBhIGxlYWRpbmcgY2FwaXRhbCwgYW5kIHplcm8gb3IgbW9yZSBsb3dlcmNhc2UKICAgICAgICBjYXBpdGFsX3dvcmQgPSBXb3JkKGFscGhhcy51cHBlcigpLCBhbHBoYXMubG93ZXIoKSkKCiAgICAgICAgIyBob3N0bmFtZXMgYXJlIGFscGhhbnVtZXJpYywgd2l0aCBsZWFkaW5nIGFscGhhLCBhbmQgJy0nCiAgICAgICAgaG9zdG5hbWUgPSBXb3JkKGFscGhhcywgYWxwaGFu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ZBGHAGYBZARkBYQJWgRkEmQHZAiEAVoFZBNkCWQKhAFaBmQUZAtkDIQBWgeHAGYBZA1kDoQIWghkD2QQhABaCYcABABaClMAKRVyRwAAAGFoBAAAVG9rZW4gZm9yIG1hdGNoaW5nIHN0cmluZ3MgdGhhdCBtYXRjaCBhIGdpdmVuIHJlZ3VsYXIKICAgIGV4cHJlc3Npb24uIERlZmluZWQgd2l0aCBzdHJpbmcgc3BlY2lmeWluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIGluCiAgICBhIGZvcm0gcmVjb2duaXplZCBieSB0aGUgc3RkbGliIFB5dGhvbiAgYHJlIG1vZHVsZSA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWw+YF8uCiAgICBJZiB0aGUgZ2l2ZW4gcmVnZXggY29udGFpbnMgbmFtZWQgZ3JvdXBzIChkZWZpbmVkIHVzaW5nIGBgKD9QPG5hbWU+Li4uKWBgKSwKICAgIHRoZXNlIHdpbGwgYmUgcHJlc2VydmVkIGFzIG5hbWVkIHBhcnNlIHJlc3VsdHMuCgogICAgSWYgaW5zdGVhZCBvZiB0aGUgUHl0aG9uIHN0ZGxpYiByZSBtb2R1bGUgeW91IHdpc2ggdG8gdXNlIGEgZGlmZmVyZW50IFJFIG1vZHVsZQogICAgKHN1Y2ggYXMgdGhlIGByZWdleGAgbW9kdWxlKSwgeW91IGNhbiByZXBsYWNlIGl0IGJ5IGVpdGhlciBidWlsZGluZyB5b3VyCiAgICBSZWdleCBvYmplY3Qgd2l0aCBhIGNvbXBpbGVkIFJFIHRoYXQgd2FzIGNvbXBpbGVkIHVzaW5nIHJlZ2V4OgoKICAgIEV4YW1wbGU6OgoKICAgICAgICByZWFsbnVtID0gUmVnZXgociJbKy1dP1xkK1wuXGQqIikKICAgICAgICBkYXRlID0gUmVnZXgocicoP1A8eWVhcj5cZHs0fSktKD9QPG1vbnRoPlxkXGQ/KS0oP1A8ZGF5PlxkXGQ/KScpCiAgICAgICAgIyByZWY6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI2NzM5OS9ob3ctZG8teW91LW1hdGNoLW9ubHktdmFsaWQtcm9tYW4tbnVt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ciBtYXRjaGluZyBzdHJpbmdzIHRoYXQgYXJlIGRlbGltaXRlZCBieSBxdW90aW5nIGNoYXJhY3RlcnMuCgogICAgRGVmaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKCiAgICAgICAgLSBxdW90ZUNoYXIgLSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVycyBkZWZpbmluZyB0aGUKICAgICAgICAgIHF1b3RlIGRlbGltaXRpbmcgc3RyaW5nCiAgICAgICAgLSBlc2NDaGFyIC0gY2hhcmFjdGVyIHRvIGVzY2FwZSBxdW90ZXMsIHR5cGljYWxseSBiYWNrc2xhc2gKICAgICAgICAgIChkZWZhdWx0PSBgYE5vbmVgYCkKICAgICAgICAtIGVzY1F1b3RlIC0gc3BlY2lhbCBxdW90ZSBzZXF1ZW5jZSB0byBlc2NhcGUgYW4gZW1iZWRkZWQgcXVvdGUKICAgICAgICAgIHN0cmluZyAoc3VjaCBhcyBTUUwncyBgYCIiYGAgdG8gZXNjYXBlIGFuIGVtYmVkZGVkIGBgImBgKQogICAgICAgICAgKGRlZmF1bHQ9IGBgTm9uZWBgKQogICAgICAgIC0gbXVsdGlsaW5lIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgcXVvdGVzIGNhbiBzcGFuCiAgICAgICAgICBtdWx0aXBsZSBsaW5lcyAoZGVmYXVsdD0gYGBGYWxzZWBgKQogICAgICAgIC0gdW5xdW90ZVJlc3VsdHMgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWF0Y2hlZCB0ZXh0CiAgICAgICAgICBzaG91bGQgYmUgdW5xdW90ZWQgKGRlZmF1bHQ9IGBgVHJ1ZWBgKQogICAgICAgIC0gZW5kUXVvdGVDaGFyIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlCiAgICAgICAgICBlbmQgb2YgdGhlIHF1b3RlIGRlbGltaXRlZCBzdHJpbmcgKGRlZmF1bHQ9IGBgTm9uZWBgICA9PiBzYW1lIGFzCiAgICAgICAgICBxdW90ZUNoYXIpCiAgICAgICAgLSBjb252ZXJ0V2hpdGVzcGFj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cHJlc3Npb25gIHMgdG8gYmUgZm91bmQsIGJ1dCBpbgogICAgYW55IG9yZGVyLiBFeHByZXNzaW9ucyBtYXkgYmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuCgogICAgTWF5IGJlIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBgYCcmJ2BgIG9wZXJhdG9yLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBjb2xvciA9IG9uZU9mKCJSRUQgT1JBTkdFIFlFTExPVyBHUkVFTiBCTFVFIFBVUlBMRSBCTEFDSyBXSElURSBCUk9XTiIpCiAgICAgICAgc2hhcGVfdHlwZSA9IG9uZU9mKCJTUVVBUkUgQ0lSQ0xFIFRSSUFOR0xFIFNUQVIgSEVYQUdPTiBPQ1RBR09OIikKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIHNoYXBlX2F0dHIgPSAic2hhcGU6IiArIHNoYXBlX3R5cGUoInNoYXBlIikKICAgICAgICBwb3NuX2F0dHIgPSAicG9zbjoiICsgR3JvdXAoaW50ZWdlcigieCIpICsgJywnICsgaW50ZWdlcigieSIpKSgicG9zbiIpCiAgICAgICAgY29sb3JfYXR0ciA9ICJjb2xvcjoiICsgY29sb3IoImNvbG9yIikKICAgICAgICBzaXplX2F0dHIgPSAic2l6ZToiICsgaW50ZWdlcigic2l6ZSIpCgogICAgICAgICMgdXNlIEVhY2ggKHVzaW5nIG9wZXJhdG9yICcmJykgdG8gYWNjZXB0IGF0dHJpYnV0ZXMgaW4gYW55IG9yZGVyCiAgICAgICAgIyAoc2hhcGUgYW5kIHBvc24gYXJlIHJlcXVpcmVkLCBjb2xvciBhbmQgc2l6ZSBhcmUgb3B0aW9uYWwpCiAgICAgICAgc2hhcGVfc3BlYyA9IHNoYXBlX2F0dHIgJiBwb3NuX2F0dHIgJiBPcHRpb25hbChjb2xvcl9hdHRyKSAmIE9wdGlvbmFsKHNpemVfYXR0cikKCiAgICAgICAgc2hhcGVfc3BlYy5ydW5UZXN0cygnJycKICAgICAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgICAgICBjb2xvcjpHUkVFTiBzaXplOjIwIHNoYXBlOlRSSUFOR0xFIHBvc246MjAsNDAKICAgICAgICAgICAgJycnCiAgICAgICAgICAgICkKCiAgICBwcmludHM6OgoKICAgICAgICBzaGFwZTogU1FVQVJFIGNvbG9yOiBCTEFDSyBwb3NuOiAxMDAsIDEyMAogICAgICAgIFsnc2hhcGU6JywgJ1NRVUFSRScsICdjb2xvcjonLCAnQkxBQ0snLCAncG9zbjonLCBbJzEwMCcsICcsJywgJzEyMCddXQogICAgICAgIC0gY29sb3I6IEJMQUNLCiAgICAgICAgLSBwb3NuOiBbJzEwMCcsICcsJywgJzEyMCddCiAgICAgICAgICAtIHg6IDEwMAogICAgICAgICAgLSB5OiAxMjAKICAgICAgICAtIHNoYXBlOiBTUVVBUkUKCgogICAgICAgIHNoYXBlOiBDSVJDTEUgc2l6ZTogNTAgY29sb3I6IEJMVUUgcG9zbjogNTAsODAKICAgICAgICBbJ3NoYXBlOicsICdDSVJDTEUnLCAnc2l6ZTonLCAnNTAnLCAnY29sb3I6JywgJ0JMVUUnLCAncG9zbjonLCBbJzUwJywgJywnLCAnODAnXV0KICAgICAgICAtIGNvbG9yOiBCTFVFCiAgICAgICAgLSBwb3NuOiBbJzUwJywgJywnLCAnODAnXQogICAgICAgICAgLSB4OiA1MAogICAgICAgICAgLSB5OiA4MAogICAgICAgIC0gc2hhcGU6IENJUkNMRQogICAgICAgIC0gc2l6ZTogNTAKCgogICAgICAgIGNvbG9yOiBHUkVFTiBzaXplOiAyMCBzaGFwZTogVFJJQU5HTEUgcG9zbjogMjAsNDAKICAgICAgICBbJ2NvbG9yOicsICdHUkVFTicsICdzaXplOicsICcyMCcsICdzaGFwZTonLCAnVFJJQU5HTEUnLCAncG9zbjonLCBbJzIwJywgJywnLCAnNDAnXV0KICAgICAgICAtIGNvbG9yOiBHUkVFTgogICAgICAgIC0gcG9zbjogWycyMCcsICcsJywgJzQwJ10KICAgICAgICAgIC0g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aWYgYSByZXN1bHRzIG5hbWUgaXMgZGVmaW5lZCBvbiB0aGUKICAgIGdpdmVuIGV4cHJlc3Npb24sIGl0IGlzIHJldHVybmVkLgoKICAgIFBhcmFtZXRlcnM6CgogICAgIC0gZXhwciAtIGV4cHJlc3Npb24gdGhhdCBtdXN0IG1hdGNoIHByaW9yIHRvIHRoZSBjdXJyZW50IHBhcnNlCiAgICAgICBsb2NhdGlvbgogICAgIC0gcmV0cmVhdCAtIChkZWZhdWx0PSBgYE5vbmVgYCkgLSAoaW50KSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzCiAgICAgICB0byBsb29rYmVoaW5kIHByaW9yIHRvIHRoZSBjdXJyZW50IHBhcnNlIGxvY2F0aW9uCgogICAgSWYgdGhlIGxvb2tiZWhpbmQgZXhwcmVzc2lvbiBpcyBhIHN0cmluZywgTGl0ZXJhbCwgS2V5d29yZCwgb3IKICAgIGEgV29yZCBvciBDaGFyc05vdEluIHdpdGggYSBzcGVjaWZpZWQgZXhhY3Qgb3IgbWF4aW11bSBsZW5ndGgsIHRoZW4KICAgIHRoZSByZXRyZWF0IHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQuIE90aGVyd2lzZSwgcmV0cmVhdCBtdXN0IGJlCiAgICBzcGVjaWZpZWQgdG8gZ2l2ZSBhIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gbG9vayBiYWNrIGZyb20KICAgIHRoZSBjdXJyZW50IHBhcnNlIHBvc2l0aW9uIGZvciBhIGxvb2tiZWhpbmQgbWF0Y2guCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgVkItc3R5bGUgdmFyaWFibGUgbmFtZXMgd2l0aCB0eXBlIHByZWZpeGVzCiAgICAgICAgaW50X3ZhciA9IFByZWNlZGVkQnkoIiMiKSArIHB5cGFyc2luZ19jb21tb24uaWRlbnRpZmllcgogICAgICAgIHN0cl92YXIgPSBQcmVjZWRlZEJ5KCIkIikgKyBweXBhcnNpbmdfY29tbW9uLmlkZW50aWZpZXIKCiAgICBOYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHPOAAAAdAB0AXwAgwKgAnwBoQEBAHwAoAOhAKAE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bAogICAgICAgICAgKG9ubHkgcmVxdWlyZWQgaWYgdGhlIHNlbnRpbmVsIHdvdWxkIG9yZGluYXJpbHkgbWF0Y2ggdGhlIHJlcGV0aXRpb24KICAgICAgICAgIGV4cHJlc3Npb24pCgogICAgRXhhbXBsZTo6CgogICAgICAgIGRhdGFfd29yZCA9IFdvcmQoYWxwaGFzKQogICAgICAgIGxhYmVsID0gZGF0YV93b3JkICsgRm9sbG93ZWRCeSgnOicpCiAgICAgICAgYXR0cl9leHByID0gR3JvdXAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogQkxBQ0siCiAgICAgICAgT25lT3JNb3JlKGF0dHJfZXhwcikucGFyc2VTdHJpbmcodGV4dCkucHByaW50KCkgICMgRmFpbCEgcmVhZCAnY29sb3InIGFzIGRhdGEgaW5zdGVhZCBvZiBuZXh0IGxhYmVsIC0+IFtbJ3NoYXBlJywgJ1NRVUFSRSBjb2xvciddXQoKICAgICAgICAjIHVzZSBzdG9wT24gYXR0cmlidXRlIGZvciBPbmVPck1vcmUgdG8gYXZvaWQgcmVhZGluZyBsYWJlbCBzdHJpbmcgYXMgcGFydCBvZiB0aGUgZGF0YQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLnBwcmludCgpICMgQmV0dGVyIC0+IFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIgbGVmdCddLCBbJ2NvbG9yJywgJ0JMQUNLJ11dCgogICAgICAgICMgY291bGQgYWxzbyBiZSB3cml0dGVuIGFzCiAgICAgICAgKGF0dHJfZXhwciAqICgxLCkpLnBh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ZXNzaW9uLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggemVybyBvciBtb3JlIHRpbWVzCiAgICAgLSBkZWZhdWx0IChvcHRpb25hbCkgLSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgb3B0aW9uYWwgZXhwcmVzc2lvbiBpcyBub3QgZm91bmQuCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgVVMgcG9zdGFsIGNvZGUgY2FuIGJlIGEgNS1kaWdpdCB6aXAsIHBsdXMgb3B0aW9uYWwgNC1kaWdpdCBxdWFsaWZpZXIKICAgICAgICB6aXAgPSBDb21iaW5lKFdvcmQobnVtcywgZXhhY3Q9NSkgKyBPcHRpb25hbCgnLScgKyBXb3JkKG51bXMsIGV4YWN0PTQpKSkKICAgICAgICB6aXAucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgdHJhZGl0aW9uYWwgWklQIGNvZGUKICAgICAgICAgICAgMTIzNDUKCiAgICAgICAgICAgICMgWklQKzQgZm9ybQogICAgICAgICAgICAxMjEwMS0wMDAxCgogICAgICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgICAgIDk4NzY1LQogICAgICAgICAgICAnJycpCgogICAgcHJpbnRzOjoKCiAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgIDEyMzQ1CiAgICAgICAgWycxMjM0NSddCgogICAgICAgICMgWklQKzQgZm9ybQogICAgICAgIDEyMTAxLTAwMDEKICAgICAgICBbJzEyMTAxLTAwMDEnXQoKICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICBeCiAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNSksIChsaW5lOjEsIGNvbDo2KQogICAgYwMAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAHMuAAAAdAB0AXwAgwJqAnwBZAFkAo0CAQB8AGoDagR8AF8EfAJ8AF8FZAN8AF8GZABTACkETkZy2QIAAFQpB3LPAgAAcjsAAABy0gAAAHK+AQAAcuwBAAByYgEAAHLwAQAAKQNy0AAAAHK+AQAAclwBAABy0QIAAHISAAAAchMAAABy0gAAAOkSAABzCAAAAAABFAEKAQYBehFPcHRpb25hbC5fX2luaXRfX1RjBAAAAAAAAAAAAAAABQAAAAkAAABDAAAAc3oAAAB6HHwAagBqAXwBfAJ8A2QBZAKNBFwCfQJ9BFcAblQEAHQCdANmAnlwAQABAAEAfABqBHwAagV1AXJofABqAGoGcl50B3wAagRnAYMBfQR8AGoEfAR8AGoAagY8AHFsfABqBGcBfQRuBGcAfQRZAG4CMAB8AnwEZgJTAHKZAwAAKQhyvgEAAHIQAgAAcj8AAAByMgEAAHJiAQAA2h1fT3B0aW9uYWxfX29wdGlvbmFsTm90TWF0Y2hlZHLrAQAAckIAAAApBXLQAAAAcr0BAAByzAAAAHIKAgAAcjACAAByEgAAAHISAAAAchMAAABy8QAAAO8SAABzFAAAAAABAgEcARABDAEIAQwBEAIKAgoBehJPcHRpb25hbC5wYXJzZUltcGxjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAczQAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAdQByLmQCdAN8AGoEgwEXAGQDFwB8AF8CfABqAlMAKQROciEBAAByegEAAHJ9AQAAcpQDAABy3wAAAHISAAAAchIAAAByEwAAAHLdAAAA/RIAAHMKAAAAAAEKAQYCCgEUAnoQT3B0aW9uYWwuX19zdHJfXykBVCkKcg8AAAByEAAAAHIRAAAAcusAAAByogMAAHKjAwAActIAAABy8QAAAHLdAAAActcCAAByEgAAAHISAAAActECAAByEwAAAHI7AAAAwhIAAHMKAAAACAEEJAYCEAYKDnI7AAAAYwAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAHMsAAAAZQBaAWQAWgJkAVoDZAmHAGYBZARkBYQJWgRkCmQHZAiEAVoFhwAEAFoGUwApC3JIAAAAYfgJAABUb2tlbiBmb3Igc2tpcHBpbmcgb3ZlciBhbGwgdW5kZWZpbmVkIHRleHQgdW50aWwgdGhlIG1hdGNoZWQKICAgIGV4cHJlc3Npb24gaXMgZm91bmQuCgogICAgUGFyYW1ldGVyczoKICAgICAtIGV4cHIgLSB0YXJnZXQgZXhwcmVzc2lvbiBtYXJraW5nIHRoZSBlbmQgb2YgdGhlIGRhdGEgdG8gYmUgc2tpcHBlZAogICAgIC0gaW5jbHVkZSAtIChkZWZhdWx0PSBgYEZhbHNlYGApIGlmIFRydWUsIHRoZSB0YXJnZXQgZXhwcmVzc2lvbiBpcyBhbHNvIHBhcnNlZAogICAgICAgICAgKHRoZSBza2lwcGVkIHRleHQgYW5kIHRhcmdldCBleHByZXNzaW9uIGFyZSByZXR1cm5lZCBhcyBhIDItZWxlbWVudCBsaXN0KS4KICAgICAtIGlnbm9yZSAtIChkZWZhdWx0PSBgYE5vbmVgYCkgdXNlZCB0byBkZWZpbmUgZ3JhbW1hcnMgKHR5cGljYWxseSBxdW90ZWQgc3RyaW5ncyBhbmQKICAgICAgICAgIGNvbW1lbnRzKSB0aGF0IG1pZ2h0IGNvbnRhaW4gZmFsc2UgbWF0Y2hlcyB0byB0aGUgdGFyZ2V0IGV4cHJlc3Npb24KICAgICAtIGZhaWxPbiAtIChkZWZhdWx0PSBgYE5vbmVgYCkgZGVmaW5lIGV4cHJlc3Npb25zIHRoYXQgYXJlIG5vdCBhbGxvd2VkIHRvIGJlCiAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgc2tpcHBlZCB0ZXN0OyBpZiBmb3VuZCBiZWZvcmUgdGhlIHRhcmdldCBleHByZXNzaW9uIGlzIGZvdW5kLAogICAgICAgICAgdGhlIFNraXBUbyBpcyBub3QgYSBtYXRjaAoKICAgIEV4YW1wbGU6OgoKICAgICAgICByZXBvcnQgPSAnJycKICAgICAgICAgICAgT3V0c3RhbmRpbmcgSXNzdWVzIFJlcG9ydCAtIDEgSmFuIDIwMDAKCiAgICAgICAgICAgICAgICMgfCBTZXZlcml0eSB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIERheXMgT3BlbgogICAgICAgICAgICAtLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KICAgICAgICAgICAgIDEwMSB8IENyaXRpY2FsIHwgSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaCAgICAgICAgICAgICAgICAgfCAgICAgICAgICA2CiAgICAgICAgICAgICAgOTQgfCBDb3NtZXRpYyB8IFNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKSAgICAgICAgIHwgICAgICAgICAxNAogICAgICAgICAgICAgIDc5IHwgTWlub3IgICAgfCBTeXN0ZW0gc2xvdyB3aGVuIHJ1bm5pbmcgdG9vIG1hbnkgcmVwb3J0cyB8ICAgICAgICAgNDcKICAgICAgICAgICAgJycnCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBTRVAgPSBTdXBwcmVzcygnfCcpCiAgICAgICAgIyB1c2UgU2tpcFRvIHRvIHNpbXBseSBtYXRjaCBldmVyeXRoaW5nIHVwIHVudGlsIHRoZSBuZXh0IFNFUAogICAgICAgICMgLSBpZ25vcmUgcXVvdGVkIHN0cmluZ3MsIHNvIHRoYXQgYSAnfCcgY2hhcmFjdGVyIGluc2lkZSBhIHF1b3RlZCBzdHJpbmcgZG9lcyBub3QgbWF0Y2gKICAgICAgICAjIC0gcGFyc2UgYWN0aW9uIHdpbGwgY2FsbCB0b2tlbi5zdHJpcCgpIGZvciBlYWNoIG1hdGNoZWQgdG9rZW4sIGkuZS4sIHRoZSBkZXNjcmlwdGlvbiBib2R5CiAgICAgICAgc3RyaW5nX2RhdGEgPSBTa2lwVG8oU0VQLCBpZ25vcmU9cXVvdGVkU3RyaW5nKQogICAgICAgIHN0cmluZ19kYXRhLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKHN0ci5zdHJpcCkpCiAgICAgICAgdGlja2V0X2V4cHIgPSAoaW50ZWdlcigiaXNzdWVfbnVtIikgKyBTRVAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoInNldiIpICsgU0VQCiAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZ19kYXRhKCJkZXNjIikgKyBTRVAKICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlcigiZGF5c19vcGVuIikpCgogICAgICAgIGZvciB0a3QgaW4gdGlja2V0X2V4cHIuc2VhcmNoU3Ry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AWQRZBKECFoLZBiHAGYBZBRkFYQJWgyHAAQAWg1TACkZci4AAABhXwMAAEZvcndhcmQgZGVjbGFyYXRpb24gb2YgYW4gZXhwcmVzc2lvbiB0byBiZSBkZWZpbmVkIGxhdGVyIC0KICAgIHVzZWQgZm9yIHJlY3Vyc2l2ZSBncmFtbWFycywgc3VjaCBhcyBhbGdlYnJhaWMgaW5maXggbm90YXRpb24uCiAgICBXaGVuIHRoZSBleHByZXNzaW9uIGlzIGtub3duLCBpdCBpcyBhc3NpZ25lZCB0byB0aGUgYGBGb3J3YXJkYGAKICAgIHZhcmlhYmxlIHVzaW5nIHRoZSAnPDwnIG9wZXJhdG9yLgoKICAgIE5vdGU6IHRha2UgY2FyZSB3aGVuIGFzc2lnbmluZyB0byBgYEZvcndhcmRgYCBub3QgdG8gb3Zlcmxvb2sKICAgIHByZWNlZGVuY2Ugb2Ygb3BlcmF0b3JzLgoKICAgIFNwZWNpZmljYWxseSwgJ3wnIGhhcyBhIGxvd2VyIHByZWNlZGVuY2UgdGhhbiAnPDwnLCBzbyB0aGF0OjoKCiAgICAgICAgZndkRXhwciA8PCBhIHwgYiB8IGMKCiAgICB3aWxsIGFjdHVhbGx5IGJlIGV2YWx1YXRlZCBhczo6CgogICAgICAgIChmd2RFeHByIDw8IGEpIHwgYiB8IGMKCiAgICB0aGVyZWJ5IGxlYXZpbmcgYiBhbmQgYyBvdXQgYXMgcGFyc2VhYmxlIGFsdGVybmF0aXZlcy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91CiAgICBleHBsaWNpdGx5IGdyb3VwIHRoZSB2YWx1ZXMgaW5zZXJ0ZWQgaW50byB0aGUgYGBGb3J3YXJkYGA6OgoKICAgICAgICBmd2RFeHByIDw8IChhIHwgYiB8IGMpCgogICAgQ29udmVydGluZyB0byB1c2UgdGhlICc8PD0nIG9wZXJhdG9yIGluc3RlYWQgd2lsbCBhdm9pZCB0aGlzIHByb2JsZW0uCgogICAgU2VlIDpjbGFzczpgUGFyc2VSZXN1bHRzLnBwcmludGAgZm9yIGFuIGV4YW1wbGUgb2YgYSByZWN1cnNpdmUKICAgIHBhcnNlciBjcmVhdGVkIHVzaW5nIGBgRm9yd2FyZGBg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ICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgIyBwcmludCBhdHRyaWJ1dGVzIGFzIHBsYWluIGdyb3VwcwogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKCiAgICAgICAgIyBpbnN0ZWFkIG9mIE9uZU9yTW9yZShleHByKSwgcGFyc2UgdXNpbmcgRGljdChPbmVPck1vcmUoR3JvdXAoZXhwcikpKSAtIERpY3Qgd2lsbCBhdXRvLWFzc2lnbiBuYW1lcwogICAgICAgIHJlc3VsdCA9IERpY3QoT25lT3JNb3JlKEdyb3VwKGF0dHJfZXhwcikpKS5wYXJzZVN0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCgogICAgICAgICMgYWNjZXNzIG5hbWVkIGZpZWxkcyBhcyBkaWN0IGVudHJpZXMsIG9yIG91dHB1dCBhcyBkaWN0CiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKQogICAgICAgIHByaW50KHJlc3VsdC5hc0RpY3QoKSkKCiAgICBwcmludHM6OgoKICAgICAgICBbJ3NoYXBlJywgJ1NRVUFSRScsICdwb3NuJywgJ3VwcGVyIGxlZnQnLCAnY29sb3InLCAnbGlnaHQgYmx1ZScsICd0ZXh0dXJlJywgJ2J1cmxhcCddCiAgICAgICAgW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsncG9zbicsICd1cHBlciBsZWZ0J10sIFsnY29sb3InLCAnbGlnaHQgYmx1ZSddLCBbJ3RleHR1cmUnLCAnYnVybGFwJ11dCiAgICAgICAgLSBjb2xvcjogbGlnaHQgYmx1ZQogICAgICAgIC0gcG9zbjogdXBwZXIgbGVmdAogICAgICAgIC0gc2hhcGU6IFNRVUFSRQogICAgICAgIC0gdGV4dHVyZTogYnVybGFwCiAgICAgICAgU1FVQVJFCiAgICAgICAgeydjb2xvcic6ICdsaWdo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byBkbyBsb25nZXN0LWZpcnN0IHRlc3Rpbmcgd2hlbiB0aGVyZSBpcyBhIGNvbmZsaWN0LAogICAgcmVnYXJkbGVzcyBvZiB0aGUgaW5wdXQgb3JkZXIsIGJ1dCByZXR1cm5zCiAgICBhIDpjbGFzczpgTWF0Y2hGaXJzdGAgZm9yIGJlc3QgcGVyZm9ybWFuY2UuCgogICAgUGFyYW1ldGVyczoKCiAgICAgLSBzdHJzIC0gYSBzdHJpbmcgb2Ygc3BhY2UtZGVsaW1pdGVkIGxpdGVyYWxzLCBvciBhIGNvbGxlY3Rpb24gb2YKICAgICAgIHN0cmluZyBsaXRlcmFscwogICAgIC0gY2FzZWxlc3MgLSAoZGVmYXVsdD0gYGBGYWxzZWBgKSAtIHRyZWF0IGFsbCBsaXRlcmFscyBhcwogICAgICAgY2FzZWxlc3MKICAgICAtIHVzZVJlZ2V4IC0gKGRlZmF1bHQ9IGBgVHJ1ZWBgKSAtIGFzIGFuIG9wdGltaXphdGlvbiwgd2lsbAogICAgICAgZ2VuZXJhdGUgYSBSZWdleCBvYmplY3Q7IG90aGVyd2lzZSwgd2lsbCBnZW5lcmF0ZQogICAgICAgYSA6Y2xhc3M6YE1hdGNoRmlyc3RgIG9iamVjdCAoaWYgYGBjYXNlbGVzcz1UcnVlYGAgb3IgYGBhc0tleXdvcmQ9VHJ1ZWBgLCBvciBpZgogICAgICAgY3JlYXRpbmcgYSA6Y2xhc3M6YFJlZ2V4YCByYWlzZXMgYW4gZXhjZXB0aW9uKQogICAgIC0gYXNLZXl3b3JkIC0gKGRlZmF1bHQ9YGBGYWxzZWBgKSAtIGVuZm9yY2UgS2V5d29yZC1zdHlsZSBtYXRjaGluZyBvbiB0aGUKICAgICAgIGdlbmVyYXRlZCBleHByZXNzaW9ucwoKICAgIEV4YW1wbGU6OgoKICAgICAgICBjb21wX29wZXIgPSBvbmVPZigiPCA9ID4gPD0gPj0gIT0iKQogICAgICAgIHZhciA9IFdvcmQoYWxwaGFzKQogICAgICAgIG51bWJlciA9IFdvcmQobnVtcykKICAgICAgICB0ZXJtID0gdmFyIHwgbnVtYmVyCiAgICAgICAgY29tcGFyaXNvbl9leHByID0gdGVybSArIGNvbXBfb3BlciArIHRl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YXJrZXJzIG9yIHB1bmN0dWF0aW9uLCBhcyBsb25nIGFzIHRoZXkgYXJlCiAgICBzdXBwcmVzc2VkLCB0aGVyZWJ5IGxlYXZpbmcgdGhlIHNpZ25pZmljYW50IGtleSB0ZXh0LiAgVGhlIHZhbHVlCiAgICBwYXR0ZXJuIGNhbiBpbmNsdWRlIG5hbWVkIHJlc3VsdHMsIHNvIHRoYXQgdGhlIDpjbGFzczpgRGljdGAgcmVzdWx0cwogICAgY2FuIGluY2x1ZGUgbmFtZWQgdG9rZW4gZmllbGRzLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogbGlnaHQgYmx1ZSB0ZXh0dXJlOiBidXJsYXAiCiAgICAgICAgYXR0cl9leHByID0gKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3BPbj1sYWJlbCkuc2V0UGFyc2VBY3Rpb24oJyAnLmpvaW4pKQogICAgICAgIHByaW50KE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLmR1bXAoKSkKCiAgICAgICAgYXR0cl9sYWJlbCA9IGxhYmVsCiAgICAgICAgYXR0cl92YWx1ZSA9IFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKQoKICAgICAgICAjIHNpbWlsYXIgdG8gRGljdCwgYnV0IHNpbXBsZXIgY2FsbCBmb3JtYXQKICAgICAgICByZXN1bHQgPSBkaWN0T2YoYXR0cl9sYWJlbCwgYXR0cl92YWx1ZSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQogICAgICAgIHByaW50KHJlc3VsdFsnc2hhcGUnXSkKICAgICAgICBwcmludChyZXN1bHQuc2hhcGUpICAjIG9iamVjdCBhdHRyaWJ1dGUgYWNjZXNzIHdvcmtzIHRvbwogICAgICAgIHByaW50KHJlc3VsdC5hc0RpY3QoKSkKCiAgICBwcmludHM6OgoKICAgICAgICBbWydzaGFwZScsICdTUVVBUkUnXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXSwgWydjb2xvcicsICdsaWdodCBibHVlJ10sIFsndGV4dHVyZScsICdidXJsYXAnXV0KICAgICAgICAtIGNvbG9yOiBsaWdodCBibHVlCiAgICAgICAgLSBwb3NuOiB1cHBlciBsZWZ0CiAgICAgICAgLSBzaGFwZTogU1FVQVJFCiAgICAgICAgLSB0ZXh0dXJlOiBidXJsYXAKICAgICAgICBTUVVBUkUKICAgICAgICBTUVVBUkUKICAgICAgICB7J2NvbG9yJzogJ2xpZ2h0IGJsdWUnLCAnc2hhcGUnOiAnU1FVQVJFJywgJ3Bvc24nOiAndXBwZXIgbGVmdCcsICd0ZXh0dXJlJzogJ2J1cmxhcCd9CiAgICApA3IqAAAAcjkAAAByMAAAACkCcmEBAAByRAEAAHISAAAAchIAAAByEwAAAHJiAAAArRUAAHMCAAAAACVyYgAAAGMCAAAAAAAAAAAAAAAGAAAABAAAAEMAAABzXgAAAHQAgwCgAWQBZAKEAKEBfQJ8AqACoQB9A2QDfANfA3wCZASDAXwAFwB8A2QFgwEXAH0EfAFyQGQGZAKEAH0FbghkB2QIhAB9BXwEoAF8BaEBAQB8AGoEfARfBHwEUwApCWGXBAAASGVscGVyIHRvIHJldHVybiB0aGUgb3JpZ2luYWwsIHVudG9rZW5pemVkIHRleHQgZm9yIGEgZ2l2ZW4KICAgIGV4cHJlc3Npb24uICBVc2VmdWwgdG8gcmVzdG9yZSB0aGUgcGFyc2VkIGZpZWxkcyBvZiBhbiBIVE1MIHN0YXJ0CiAgICB0YWcgaW50byB0aGUgcmF3IHRhZyB0ZXh0IGl0c2VsZiwgb3IgdG8gcmV2ZXJ0IHNlcGFyYXRlIHRva2VucyB3aXRoCiAgICBpbnRlcnZlbmluZyB3aGl0ZXNwYWNlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIG1hdGNoaW5nIGlucHV0IHRleHQuIEJ5CiAgICBkZWZhdWx0LCByZXR1cm5zIGFzdHJpbmcgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcGFyc2VkIHRleHQuCgogICAgSWYgdGhlIG9wdGlvbmFsIGBgYXNTdHJpbmdgYCBhcmd1bWVudCBpcyBwYXNzZWQgYXMKICAgIGBgRmFsc2VgYCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzCiAgICBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBjb250YWluaW5nIGFueSByZXN1bHRzIG5hbWVzIHRoYXQKICAgIHdlcmUgb3JpZ2luYWxseSBtYXRjaGVkLCBhbmQgYSBzaW5nbGUgdG9rZW4gY29udGFpbmluZyB0aGUgb3JpZ2luYWwKICAgIG1hdGNoZWQgdGV4dCBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuICBTbyBpZiB0aGUgZXhwcmVzc2lvbiBwYXNzZWQgdG8KICAgIDpjbGFzczpgb3JpZ2luYWxUZXh0Rm9yYCBjb250YWlucyBleHByZXNzaW9ucyB3aXRoIGRlZmluZWQKICAgIHJlc3VsdHMgbmFtZXMsIHlvdSBtdXN0IHNldCBgYGFzU3RyaW5nYGAgdG8gYGBGYWxzZWBgIGlmIHlvdQogICAgd2FudCB0byBwcmVzZXJ2ZSB0aG9zZSByZXN1bHRzIG5hbWUgdmFsdWVzLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBzcmMgPSAidGhpcyBpcyB0ZXN0IDxiPiBib2xkIDxpPnRleHQ8L2k+IDwvYj4gbm9ybWFsIHRleHQgIgogICAgICAgIGZvciB0YWcgaW4gKCJiIiwgImkiKToKICAgICAgICAgICAgb3BlbmVyLCBjbG9zZXIgPSBtYWtlSFRNTFRhZ3ModGFnKQogICAgICAgICAgICBwYXR0ID0gb3JpZ2luYWxUZXh0Rm9yKG9wZW5lciArIFNraXBUbyhjbG9zZXIpICsgY2xvc2VyKQogICAgICAgICAgICBwcmludChwYXR0LnNlYXJjaFN0cmluZyhzcmMpWzBdKQoKICAgIHByaW50czo6CgogICAgICAgIFsnPGI+IGJvbGQgPGk+dGV4dDwvaT4gPC9iPiddCiAgICAgICAgWyc8aT50ZXh0PC9pPiddCiAgICBjAwAAAAAAAAAAAAAAAwAAAAEAAABTAAAAcwQAAAB8AVMAcqkAAAByEgAAACkDcq8AAAByzAAAAHKbAAAAchIAAAByEgAAAHITAAAAcpwAAADxFQAAchQAAAB6IW9yaWdpbmFsVGV4dEZvci48bG9jYWxzPi48bGFtYmRhPkbaD19vcmlnaW5hbF9zdGFydNoNX29yaWdpbmFsX2VuZGMDAAAAAAAAAAAAAAADAAAAAwAAAFMAAABzEAAAAHwAfAJqAHwCagGFAhkAUwByqQAAACkCcucDAABy6AMAAHLBAAAAchIAAAByEgAAAHITAAAAcpwAAAD2FQAAchQAAABjAwAAAAAAAAAAAAAAAwAAAAUAAABTAAAAcyYAAAB8AHwCoABkAaEBfAKgAGQCoQGFAhkAZwF8AmQAZACFAjwAZABTACkDTnLnAwAAcugDAAApAXJgAQAAcsEAAAByEgAAAHISAAAAchMAAADaC2V4dHJhY3RUZXh0+BUAAHMCAAAAAAF6JG9yaWdpbmFsVGV4dEZvci48bG9jYWxzPi5leHRyYWN0VGV4dCkFciwAAABypAAAAHJsAQAAcvkBAABy8gEAACkGcr4BAADaCGFzU3RyaW5n2glsb2NNYXJrZXLaDGVuZGxvY01hcmtlctoJbWF0Y2hFeHBycukDAAByEgAAAHISAAAAchMAAAByiAAAANQVAABzFAAAAAAdEAEIAQYBFAEEAQoCCAIKAQgBcogAAABjAQAAAAAAAAAAAAAAAQAAAAQAAABDAAAAcxIAAAB0AHwAgwGgAWQBZAKEAKEBUwApA3prSGVscGVyIHRvIHVuZG8gcHlwYXJzaW5nJ3MgZGVmYXVsdCBncm91cGluZyBvZiBBbmQgZXhwcmVzc2lvbnMsCiAgICBldmVuIGlmIGFsbCBidXQgb25lIGFyZSBub24tZW1wdHkuCiAgICBjAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAAcwgAAAB8AGQBGQBTAHIaAQAAchIAAABymgAAAHISAAAAchIAAAByEwAAAHKcAAAAAhYAAHIUAAAAehl1bmdyb3VwLjxsb2NhbHM+LjxsYW1iZGE+KQJyTQAAAHIYAgAAKQFyvgEAAHISAAAAchIAAAByEwAAAHKJAAAA/hUAAHMCAAAAAARyiQAAAGMBAAAAAAAAAAAAAAACAAAABAAAAEMAAABzNAAAAHQAgwCgAWQBZAKEAKEBfQF0AnwBZAODAXwAZASDARcAfAGgA6EAoAShAGQFgwEXAIMBUwApBmGxAgAASGVscGVyIHRvIGRlY29yYXRlIGEgcmV0dXJuZWQgdG9rZW4gd2l0aCBpdHMgc3RhcnRpbmcgYW5kIGVuZGluZwogICAgbG9jYXRpb25zIGluIHRoZSBpbnB1dCBzdHJpbmcuCgogICAgVGhpcyBoZWxwZXIgYWRkcyB0aGUgZm9sbG93aW5nIHJlc3VsdHMgbmFtZXM6CgogICAgIC0gbG9jbl9zdGFydCA9IGxvY2F0aW9uIHdoZXJlIG1hdGNoZWQgZXhwcmVzc2lvbiBiZWdpbnMKICAgICAtIGxvY25fZW5kID0gbG9jYXRpb24gd2hlcmUgbWF0Y2hlZCBleHByZXNzaW9uIGVuZHMKICAgICAtIHZhbHVlID0gdGhlIGFjdHVhbCBwYXJzZWQgcmVzdWx0cwoKICAgIEJlIGNhcmVmdWwgaWYgdGhlIGlucHV0IHRleHQgY29udGFpbnMgYGA8VEFCPmBgIGNoYXJhY3RlcnMsIHlvdQogICAgbWF5IHdhbnQgdG8gY2FsbCA6Y2xhc3M6YFBhcnNlckVsZW1lbnQucGFyc2VXaXRoVGFic2AKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgd2QgPSBXb3JkKGFscGhhcykKICAgICAgICBmb3IgbWF0Y2ggaW4gbG9jYXRlZEV4cHIod2QpLnNlYXJjaFN0cmluZygibGpzZGYxMjNsa3NkampmMTIzbGtramoxMjIyIik6CiAgICAgICAgICAgIHByaW50KG1hdGNoKQoKICAgIHByaW50czo6CgogICAgICAgIFtbMCwgJ2xqc2RmJywgNV1dCiAgICAgICAgW1s4LCAnbGtzZGpqZicsIDE1XV0KICAgICAgICBbWzE4LCAnbGtramonLCAyM11dCiAgICBjAwAAAAAAAAAAAAAAAwAAAAEAAABTAAAAcwQAAAB8AVMAcqkAAAByEgAAAHLBAAAAchIAAAByEgAAAHITAAAAcpwAAAAdFgAAchQAAAB6HWxvY2F0ZWRFeHByLjxsb2NhbHM+LjxsYW1iZGE+2gpsb2NuX3N0YXJ0ckQBAADaCGxvY25fZW5kKQVyLAAAAHKkAAAAcjAAAABybAEAAHKcAgAAKQJyvgEAANoHbG9jYXRvcnISAAAAchIAAAByEwAAAHKLAAAABBYAAHMEAAAAABkQAXKLAAAAcmQAAAByagAAAHJpAAAAcoIAAABygQAAAHoOXFtdLSouJCtePygpfiCpAXIKAwAAYwMAAAAAAAAAAAAAAAMAAAACAAAAQwAAAHMMAAAAfAJkARkAZAIZAFMAcjsBAAByEgAAAHLBAAAAchIAAAByEgAAAHITAAAAcpwAAAAoFgAAchQAAABynAAAAHoUXFwwP1t4WF1bMC05YS1mQS1GXStjAwAAAAAAAAAAAAAAAwAAAAUAAABDAAAAcxgAAAB0AHQBfAJkARkAoAJkAqEBZAODAoMBUwApBE5yAQAAAHoDXDB4cu0AAAApA9oGdW5pY2hycpkAAAByvgIAAHLBAAAAchIAAAByEgAAAHITAAAAcpwAAAApFgAAchQAAAB6CVxcMFswLTddK2MDAAAAAAAAAAAAAAADAAAABQAAAEMAAABzGgAAAHQAdAF8AmQBGQBkAmQAhQIZAGQDgwKDAVMAKQROcgEAAAByrAAAAOkIAAAAKQJy8gMAAHKZAAAAcsEAAAByEgAAAHISAAAAchMAAABynAAAACoWAAByFAAAAHoCXF1yVgMAAHJ6AQAAcu8AAADaBm5lZ2F0ZdoEYm9keXJ9AQAAYwEAAAAAAAAAAAAAAAEAAAAIAAAAAwAAAHNEAAAAZAFkAoQAiQB6ImQDoACHAGYBZARkBYQIdAGgAnwAoQFqA0QAgwGhAVcAUwAEAHQEeT4BAAEAAQBZAGQDUwAwAGQGUwApB2EIBAAASGVscGVyIHRvIGVhc2lseSBkZWZpbmUgc3RyaW5nIHJhbmdlcyBmb3IgdXNlIGluIFdvcmQKICAgIGNvbnN0cnVjdGlvbi4gQm9ycm93cyBzeW50YXggZnJvbSByZWdleHAgJ1tdJyBzdHJpbmcgcmFuZ2UKICAgIGRlZmluaXRpb25zOjoKCiAgICAgICAgc3JhbmdlKCJbMC05XSIpICAgLT4gIjAxMjM0NTY3ODkiCiAgICAgICAgc3JhbmdlKCJbYS16XSIpICAgLT4gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgogICAgICAgIHNyYW5nZSgiW2EteiRfXSIpIC0+ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiRfIgoKICAgIFRoZSBpbnB1dCBzdHJpbmcgbXVzdCBiZSBlbmNsb3NlZCBpbiBbXSdzLCBhbmQgdGhlIHJldHVybmVkIHN0cmluZwogICAgaXMgdGhlIGV4cGFuZGVkIGNoYXJhY3RlciBzZXQgam9pbmVkIGludG8gYSBzaW5nbGUgc3RyaW5nLiBUaGUKICAgIHZhbHVlcyBlbmNsb3NlZCBpbiB0aGUgW10ncyBtYXkgYmU6CgogICAgIC0gYSBzaW5nbGUgY2hhcmFjdGVyCiAgICAgLSBhbiBlc2NhcGVkIGNoYXJhY3RlciB3aXRoIGEgbGVhZGluZyBiYWNrc2xhc2ggKHN1Y2ggYXMgYGBcLWBgCiAgICAgICBvciBgYFxdYGApCiAgICAgLSBhbiBlc2NhcGVkIGhleCBjaGFyYWN0ZXIgd2l0aCBhIGxlYWRpbmcgYGAnXHgnYGAKICAgICAgIChgYFx4MjFgYCwgd2hpY2ggaXMgYSBgYCchJ2BgIGNoYXJhY3RlcikgKGBgXDB4IyNgYAogICAgICAgaXMgYWxzbyBzdXBwb3J0ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KQogICAgIC0gYW4gZXNjYXBlZCBvY3RhbCBjaGFyYWN0ZXIgd2l0aCBhIGxlYWRpbmcgYGAnXDAnYGAKICAgICAgIChgYFwwNDFgYCwgd2hpY2ggaXMgYSBgYCchJ2BgIGNoYXJhY3RlcikKICAgICAtIGEgcmFuZ2Ugb2YgYW55IG9mIHRoZSBhYm92ZSwgc2VwYXJhdGVkIGJ5IGEgZGFzaCAoYGAnYS16J2BgLAogICAgICAgZXRjLikKICAgICAtIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgYWJvdmUgKGBgJ2FlaW91eSdgYCwKICAgICAgIGBgJ2EtekEtWjAtOV8kJ2BgLCBldGMuKQogICAgYwEAAAAAAAAAAAAAAAEAAAAIAAAAUwAAAHM8AAAAdAB8AHQBgwJzDnwAUwBkAaACZAJkA4QAdAN0BHwAZAQZAIMBdAR8AGQFGQCDAWQFFwCDAkQAgwGhAVMAKQZOcrsAAABjAQAAAAAAAAAAAAAAAgAAAAMAAABzAAAAcxYAAAB8AF0OfQF0AHwBgwFWAAEAcQJkAFMAcqkAAACpAXLyAwAAcr4AAAByEgAAAHISAAAAchMAAAByqwAAAEkWAAByFAAAAHorc3JhbmdlLjxsb2NhbHM+LjxsYW1iZGE+Ljxsb2NhbHM+LjxnZW5leHByPnIBAAAAcqwAAAApBXKdAAAAckIAAABy4gAAAHI8AQAA2gNvcmQpAdoBcHISAAAAchIAAAByEwAAAHKcAAAASRYAAHIUAAAAehhzcmFuZ2UuPGxvY2Fscz4uPGxhbWJkYT5yuwAAAGMBAAAAAAAAAAAAAAACAAAAAwAAADMAAABzFgAAAHwAXQ59AYgAfAGDAVYAAQBxAmQAUwByqQAAAHISAAAAKQJyFwAAANoEcGFydKkB2glfZXhwYW5kZWRyEgAAAHITAAAAcqsAAABLFgAAchQAAAB6GXNyYW5nZS48bG9jYWxzPi48Z2VuZXhwcj5OKQVy4gAAANoOX3JlQnJhY2tldEV4cHJyZgIAAHL1AwAAcrABAAByDgMAAHISAAAAcvoDAAByEwAAAHKAAAAALxYAAHMKAAAAABoIAQIBIgEMAXKAAAAAYwEAAAAAAAAAAAAAAAIAAAADAAAAAwAAAHMQAAAAhwBmAWQBZAKECH0BfAFTACkDem9IZWxwZXIgbWV0aG9kIGZvciBkZWZpbmluZyBwYXJzZSBhY3Rpb25zIHRoYXQgcmVxdWlyZSBtYXRjaGluZyBhdAogICAgYSBzcGVjaWZpYyBjb2x1bW4gaW4gdGhlIGlucHV0IHRleHQuCiAgICBjAwAAAAAAAAAAAAAAAwAAAAUAAAATAAAAcyIAAAB0AHwBfACDAogAawNyHnQBfAB8AWQBiAAWAIMDggFkAFMAKQJOeh5tYXRjaGVkIHRva2VuIG5vdCBhdCBjb2x1bW4gJWRySAMAACkDcrcBAADaBGxvY25ywgEAAHKHAgAAchIAAAByEwAAANoJdmVyaWZ5Q29sUxYAAHMEAAAAAAEOAXohbWF0Y2hPbmx5QXRDb2wuPGxvY2Fscz4udmVyaWZ5Q29schIAAAApAnKIAgAAcv4DAAByEgAAAHKHAgAAchMAAABybgAAAE8WAABzBAAAAAAEDANybgAAAGMBAAAAAAAAAAAAAAABAAAAAwAAAAMAAABzDAAAAIcAZgFkAWQChAhTACkDYbUBAABIZWxwZXIgbWV0aG9kIGZvciBjb21tb24gcGFyc2UgYWN0aW9ucyB0aGF0IHNpbXBseSByZXR1cm4KICAgIGEgbGl0ZXJhbCB2YWx1ZS4gIEVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gdXNlZCB3aXRoCiAgICA6Y2xhc3M6YHRyYW5zZm9ybVN0cmluZzxQYXJzZXJFbGVtZW50LnRyYW5zZm9ybVN0cmluZz5gICgpLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBudW0gPSBXb3JkKG51bXMpLnNldFBhcnNlQWN0aW9uKGxhbWJkYSB0b2tzOiBpbnQodG9rc1swXSkpCiAgICAgICAgbmEgPSBvbmVPZigiTi9BIE5BIikuc2V0UGFyc2VBY3Rpb24ocmVwbGFjZVdpdGgobWF0aC5uYW4pKQogICAgICAgIHRlcm0gPSBuYSB8IG51bQoKICAgICAgICBPbmVPck1vcmUodGVybSkucGFyc2VTdHJpbmcoIjMyNCAyMzQgTi9BIDIzNCIpICMgLT4gWzMyNCwgMjM0LCBuYW4sIDIzNF0KICAgIGMDAAAAAAAAAAAAAAADAAAAAQAAABMAAABzBgAAAIgAZwFTAHKpAAAAchIAAABywQAAAKkB2gdyZXBsU3RychIAAAByEwAAAHKcAAAAZRYAAHIUAAAAeh1yZXBsYWNlV2l0aC48bG9jYWxzPi48bGFtYmRhPnISAAAAcv8DAAByEgAAAHL/AwAAchMAAAByfQAAAFgWAABzAgAAAAANcn0AAABjAwAAAAAAAAAAAAAAAwAAAAMAAABDAAAAcxAAAAB8AmQBGQBkAmQDhQIZAFMAKQRhFQIAAEhlbHBlciBwYXJzZSBhY3Rpb24gZm9yIHJlbW92aW5nIHF1b3RhdGlvbiBtYXJrcyBmcm9tIHBhcnNlZAogICAgcXVvdGVkIHN0cmluZ3MuCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgYnkgZGVmYXVsdCwgcXVvdGF0aW9uIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiBwYXJzZWQgcmVzdWx0cwogICAgICAgIHF1b3RlZFN0cmluZy5wYXJzZVN0cmluZygiJ05vdyBpcyB0aGUgV2ludGVyIG9mIG91ciBEaXNjb250ZW50JyIpICMgLT4gWyInTm93IGlzIHRoZSBXaW50ZXIgb2Ygb3VyIERpc2NvbnRlbnQnIl0KCiAgICAgICAgIyB1c2UgcmVtb3ZlUXVvdGVzIHRvIHN0cmlwIHF1b3RhdGlvbiBtYXJrcyBmcm9tIHBhcnNlZCByZXN1bHRzCiAgICAgICAgcXVvdGVkU3RyaW5nLnNldFBhcnNlQWN0aW9uKHJlbW92ZVF1b3RlcykKICAgICAgICBxdW90ZWRTdHJpbmcucGFyc2VTdHJpbmcoIidOb3cgaXMgdGhlIFdpbnRlciBvZiBvdXIgRGlzY29udGVudCciKSAjIC0+IFsiTm93IGlzIHRoZSBXaW50ZXIgb2Ygb3VyIERpc2NvbnRlbnQiXQogICAgcgEAAAByrAAAAHKXAAAAchIAAABywQAAAHISAAAAchIAAAByEwAAAHJ7AAAAZxYAAHMCAAAAAA1yewAAAGMBAAAAAAAAAAAAAAAEAAAACAAAAAcAAABzTAAAAIcAhwFmAmQBZAKECH0Cehh0AIgBZAN0AIgBZASDAmoBgwN9A1cAbhoEAHQCeUABAAEAAQB0A4gBgwF9A1kAbgIwAHwDfAJfAXwCUwApBWFMBQAASGVscGVyIHRvIGRlZmluZSBhIHBhcnNlIGFjdGlvbiBieSBtYXBwaW5nIGEgZnVuY3Rpb24gdG8gYWxsCiAgICBlbGVtZW50cyBvZiBhIFBhcnNlUmVzdWx0cyBsaXN0LiBJZiBhbnkgYWRkaXRpb25hbCBhcmdzIGFyZSBwYXNzZWQsCiAgICB0aGV5IGFyZSBmb3J3YXJkZWQgdG8gdGhlIGdpdmVuIGZ1bmN0aW9uIGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzCiAgICBhZnRlciB0aGUgdG9rZW4sIGFzIGluCiAgICBgYGhleF9pbnRlZ2VyID0gV29yZChoZXhudW1zKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChpbnQsIDE2KSlgYCwKICAgIHdoaWNoIHdpbGwgY29udmVydCB0aGUgcGFyc2VkIGRhdGEgdG8gYW4gaW50ZWdlciB1c2luZyBiYXNlIDE2LgoKICAgIEV4YW1wbGUgKGNvbXBhcmUgdGhlIGxhc3QgdG8gZXhhbXBsZSBpbiA6Y2xhc3M6YFBhcnNlckVsZW1lbnQudHJhbnNmb3JtU3RyaW5nYDo6CgogICAgICAgIGhleF9pbnRzID0gT25lT3JNb3JlKFdvcmQoaGV4bnVtcykpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKGludCwgMTYpKQogICAgICAgIGhleF9pbnRzLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAwMCAxMSAyMiBhYSBGRiAwYSAwZCAxYQogICAgICAgICAgICAnJycpCgogICAgICAgIHVwcGVyd29yZCA9IFdvcmQoYWxwaGFzKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIudXBwZXIpKQogICAgICAgIE9uZU9yTW9yZSh1cHBlcndvcmQpLnJ1blRlc3RzKCcnJwogICAgICAgICAgICBteSBraW5nZG9tIGZvciBhIGhvcnNlCiAgICAgICAgICAgICcnJykKCiAgICAgICAgd2QgPSBXb3JkKGFscGhhcykuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnRpdGxlKSkKICAgICAgICBPbmVPck1vcmUod2QpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKS5ydW5UZXN0cygnJycKICAgICAgICAgICAgbm93IGlzIHRoZSB3aW50ZXIgb2Ygb3VyIGRpc2NvbnRlbnQgbWFkZSBnbG9yaW91cyBzdW1tZXIgYnkgdGhpcyBzdW4gb2YgeW9yawogICAgICAgICAgICAnJycpCgogICAgcHJpbnRzOjoKCiAgICAgICAgMDAgMTEgMjIgYWEgRkYgMGEgMGQgMWEKICAgICAgICBbMCwgMTcsIDM0LCAxNzAsIDI1NSwgMTAsIDEzLCAyNl0KCiAgICAgICAgbXkga2luZ2RvbSBmb3IgYSBob3JzZQogICAgICAgIFsnTVknLCAnS0lOR0RPTScsICdGT1InLCAnQScsICdIT1JTRSddCgogICAgICAgIG5vdyBpcyB0aGUgd2ludGVyIG9mIG91ciBkaXNjb250ZW50IG1hZGUgZ2xvcmlvdXMgc3VtbWVyIGJ5IHRoaXMgc3VuIG9mIHlvcmsKICAgICAgICBbJ05vdyBJcyBUaGUgV2ludGVyIE9mIE91ciBEaXNjb250ZW50IE1hZGUgR2xvcmlvdXMgU3VtbWVyIEJ5IFRoaXMgU3VuIE9mIFlvcmsnXQogICAgYwMAAAAAAAAAAAAAAAMAAAADAAAAEwAAAHMUAAAAhwCHAWYCZAFkAoQIfAJEAIMBUwApA05jAQAAAAAAAAAAAAAAAgAAAAUAAAATAAAAcxwAAABnAHwAXRR9AYgBfAFnAYgAogFSAI4AkQJxBFMAchIAAAByEgAAACkCchcAAADaBHRva26pAnLPAAAAcsUBAAByEgAAAHITAAAAchkAAACbFgAAchQAAAB6KHRva2VuTWFwLjxsb2NhbHM+LnBhLjxsb2NhbHM+LjxsaXN0Y29tcD5yEgAAAHLBAAAAcgIEAAByEgAAAHITAAAAcscAAACaFgAAcwIAAAAAAXoUdG9rZW5NYXAuPGxvY2Fscz4ucGFyDwAAAHLZAQAAKQRy2wEAAHIPAAAAcrABAABynwAAACkEcsUBAAByzwAAAHLHAAAAct4BAAByEgAAAHICBAAAchMAAAByjgAAAHYWAABzEgAAAAAkDgMCAQYBCv8IAgwBDgEGAnKOAAAAYwEAAAAAAAAAAAAAAAEAAAACAAAAQwAAAHMMAAAAdAB8AIMBoAGhAFMAcqkAAACpAnKoAAAAcucCAABymgAAAHISAAAAchIAAAByEwAAAHKcAAAAphYAAHIUAAAAYwEAAAAAAAAAAAAAAAEAAAACAAAAQwAAAHMMAAAAdAB8AIMBoAGhAFMAcqkAAACpAnKoAAAA2gVsb3dlcnKaAAAAchIAAAByEgAAAHITAAAAcpwAAACqFgAAchQAAAByjQEAAHKOAQAAYwQAAAAAAAAAAAAAAAgAAAAIAAAAAwAAAHN+AQAAdAB8AHQBgwJyHnwAiQB0AnwAfAEMAGQBjQJ9AG4GfABqA4kAdAR0BXQGZAIXAIMCfQR8AXKOdAegCKEAoAl0CqEBfQV8AnwAZAODARcAdAt0DHQNfAR0DmQEgwEXAHwFFwCDAYMBgwEXAHQPZAVkBmcBZAeNAmQIgwGgCWQJZAqEAKEBFwB8AxcAfQZubHQQoAihAKAJdAqhAXQEdBFkC2QMjQJCAH0FfAJ8AGQDgwEXAHQLdAx0DXwEoAl0EqEBdA90DmQEgwF8BRcAgwEXAIMBgwGDARcAdA9kBWQGZwFkB40CZAiDAaAJZA1kCoQAoQEXAHwDFwB9BnQTdBRkDoMBfAAXAGQLFwBkBmQPjQJ9B3wGoBVkEIgAFgChAQEAfAagFocAZgFkEWQKhAihAQEAfAdkEmQToBeIAKAYZBRkFaECoBmhAKAaoQChARcAgwGgFWQWiAAWAKEBfQeIAHwGXxuIAHwHXxt0HHwHgwCDAXwGXx18BnwHZgJTACkXelJJbnRlcm5hbCBoZWxwZXIgdG8gY29uc3RydWN0IG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFnIGV4cHJlc3Npb25zLCBnaXZlbiBhIHRhZyBuYW1lcuwCAAB6A18tOtoDdGFn+gE9+gEvRqkBclwBAAByZAAAAGMDAAAAAAAAAAAAAAADAAAAAgAAAFMAAABzDAAAAHwCZAEZAGQCawJTAKkDTnIBAAAAcggEAAByEgAAAHLBAAAAchIAAAByEgAAAHITAAAAcpwAAAC+FgAAchQAAAB6G19tYWtlVGFncy48bG9jYWxzPi48bGFtYmRhPnKOAQAAcvgCAABjAwAAAAAAAAAAAAAAAwAAAAIAAABTAAAAcwwAAAB8AmQBGQBkAmsCUwByCgQAAHISAAAAcsEAAAByEgAAAHISAAAAchMAAABynAAAAMYWAAByFAAAAHKPAQAAKQFysgMAAHoEPCVzPmMBAAAAAAAAAAAAAAABAAAACQAAABMAAABzKgAAAHwAoABkAWQCoAGIAKACZANkBKECoAOhAKAEoQChARcAfACgBaEAoQJTACkFTnLxAgAAcrsAAAD6ATpy7gAAACkGcjoBAABy4gAAAHKyAAAA2gV0aXRsZXKwAAAAcmwBAABymgAAAKkB2gdyZXNuYW1lchIAAAByEwAAAHKcAAAAzBYAAHIUAAAAchEDAAByuwAAAHILBAAAcu4AAAB6BTwvJXM+KR5ynQAAAHIvAQAAcjEAAAByIQEAAHJPAAAAclUAAAByVAAAAHJfAAAAcmwBAABypAAAAHJ7AAAAcioAAAByUgAAAHIwAAAAcksAAAByOwAAAHJ6AAAAcncAAAByYwAAAHIpAAAA2gJfTHIAAgAAchgCAABy4gAAAHKyAAAAcgwEAABysAAAAHIGBAAAckgAAADaCHRhZ19ib2R5KQjaBnRhZ1N0ctoDeG1s2gtzdXBwcmVzc19MVNoLc3VwcHJlc3NfR1TaC3RhZ0F0dHJOYW1l2gx0YWdBdHRyVmFsdWXaB29wZW5UYWfaCGNsb3NlVGFnchIAAAByDQQAAHITAAAA2glfbWFrZVRhZ3OuFgAAc0gAAAAABAoBBAEQAgYCDgEEAQ4BAgEG/wICGv4CAxr9AgQC/AYGGgECAQb/AgIOAQ7/CP4CBBr8AgUC+wQGGAIOAhIBLAEGAQYBDAFyGQQAAGMBAAAAAAAAAAAAAAABAAAAAwAAAEMAAABzCgAAAHQAfABkAYMCUwApAmFLAwAASGVscGVyIHRvIGNvbnN0cnVjdCBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZyBleHByZXNzaW9ucyBmb3IgSFRNTCwKICAgIGdpdmVuIGEgdGFnIG5hbWUuIE1hdGNoZXMgdGFncyBpbiBlaXRoZXIgdXBwZXIgb3IgbG93ZXIgY2FzZSwKICAgIGF0dHJpYnV0ZXMgd2l0aCBuYW1lc3BhY2VzIGFuZCB3aXRoIHF1b3RlZCBvciB1bnF1b3RlZCB2YWx1ZXMuCgogICAgRXhhbXBsZTo6CgogICAgICAgIHRleHQgPSAnPHRkPk1vcmUgaW5mbyBhdCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3B5cGFyc2luZy9weXBhcnNpbmcvd2lraSI+cHlwYXJzaW5nPC9hPiB3aWtpIHBhZ2U8L3RkPicKICAgICAgICAjIG1ha2VIVE1MVGFncyByZXR1cm5zIHB5cGFyc2luZyBleHByZXNzaW9ucyBmb3IgdGhlIG9wZW5pbmcgYW5kCiAgICAgICAgIyBjbG9zaW5nIHRhZ3MgYXMgYSAyLXR1cGxlCiAgICAgICAgYSwgYV9lbmQgPSBtYWtlSFRNTFRhZ3MoIkEiKQogICAgICAgIGxpbmtfZXhwciA9IGEgKyBTa2lwVG8oYV9lbmQpKCJsaW5rX3RleHQiKSArIGFfZW5kCgogICAgICAgIGZvciBsaW5rIGluIGxpbmtfZXhwci5zZWFyY2hTdHJpbmcodGV4dCk6CiAgICAgICAgICAgICMgYXR0cmlidXRlcyBpbiB0aGUgPEE+IHRhZyAobGlrZSAiaHJlZiIgc2hvd24gaGVyZSkgYXJlCiAgICAgICAgICAgICMgYWxzbyBhY2Nlc3NpYmxlIGFzIG5hbWVkIHJlc3VsdHMKICAgICAgICAgICAgcHJpbnQobGluay5saW5rX3RleHQsICctPicsIGxpbmsuaHJlZikKCiAgICBwcmludHM6OgoKICAgICAgICBweXBhcnNpbmcgLT4gaHR0cHM6Ly9naXRodWIuY29tL3B5cGFyc2luZy9weXBhcnNpbmcvd2lraQogICAgRqkBchkEAACpAXIRBAAAchIAAAByEgAAAHITAAAAcmwAAADTFgAAcwIAAAAAFnJsAAAAYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHMKAAAAdAB8AGQBgwJTACkCertIZWxwZXIgdG8gY29uc3RydWN0IG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFnIGV4cHJlc3Npb25zIGZvciBYTUwsCiAgICBnaXZlbiBhIHRhZyBuYW1lLiBNYXRjaGVzIHRhZ3Mgb25seSBpbiB0aGUgZ2l2ZW4gdXBwZXIvbG93ZXIgY2FzZS4KCiAgICBFeGFtcGxlOiBzaW1pbGFyIHRvIDpjbGFzczpgbWFrZUhUTUxUYWdzYAogICAgVHIaBAAAchsEAAByEgAAAHISAAAAchMAAABybQAAAOsWAABzAgAAAAAGcm0AAABjAAAAAAAAAAAAAAAAAwAAAAMAAAAPAAAAczgAAAB8AHISfABkAWQBhQIZAIkAbgh8AaAAoQCJAGQCZAOEAIgARACDAYkAhwBmAWQEZAWECH0CfAJTACkGYTcIAABIZWxwZXIgdG8gY3JlYXRlIGEgdmFsaWRhdGluZyBwYXJzZSBhY3Rpb24gdG8gYmUgdXNlZCB3aXRoIHN0YXJ0CiAgICB0YWdzIGNyZWF0ZWQgd2l0aCA6Y2xhc3M6YG1ha2VYTUxUYWdzYCBvcgogICAgOmNsYXNzOmBtYWtlSFRNTFRhZ3NgLiBVc2UgYGB3aXRoQXR0cmlidXRlYGAgdG8gcXVhbGlmeQogICAgYSBzdGFydGluZyB0YWcgd2l0aCBhIHJlcXVpcmVkIGF0dHJpYnV0ZSB2YWx1ZSwgdG8gYXZvaWQgZmFsc2UKICAgIG1hdGNoZXMgb24gY29tbW9uIHRhZ3Mgc3VjaCBhcyBgYDxURD5gYCBvciBgYDxESVY+YGAuCgogICAgQ2FsbCBgYHdpdGhBdHRyaWJ1dGVgYCB3aXRoIGEgc2VyaWVzIG9mIGF0dHJpYnV0ZSBuYW1lcyBhbmQKICAgIHZhbHVlcy4gU3BlY2lmeSB0aGUgbGlzdCBvZiBmaWx0ZXIgYXR0cmlidXRlcyBuYW1lcyBhbmQgdmFsdWVzIGFzOgoKICAgICAtIGtleXdvcmQgYXJndW1lbnRzLCBhcyBpbiBgYChhbGlnbj0icmlnaHQiKWBgLCBvcgogICAgIC0gYXMgYW4gZXhwbGljaXQgZGljdCB3aXRoIGBgKipgYCBvcGVyYXRvciwgd2hlbiBhbiBhdHRyaWJ1dGUKICAgICAgIG5hbWUgaXMgYWxzbyBhIFB5dGhvbiByZXNlcnZlZCB3b3JkLCBhcyBpbiBgYCoqeyJjbGFzcyI6IkN1c3RvbWVyIiwgImFsaWduIjoicmlnaHQifWBgCiAgICAgLSBhIGxpc3Qgb2YgbmFtZS12YWx1ZSB0dXBsZXMsIGFzIGluIGBgKCgibnMxOmNsYXNzIiwgIkN1c3RvbWVyIiksICgibnMyOmFsaWduIiwgInJpZ2h0IikpYGAKCiAgICBGb3IgYXR0cmlidXRlIG5hbWVzIHdpdGggYSBuYW1lc3BhY2UgcHJlZml4LCB5b3UgbXVzdCB1c2UgdGhlIHNlY29uZAogICAgZm9ybS4gIEF0dHJpYnV0ZSBuYW1lcyBhcmUgbWF0Y2hlZCBpbnNlbnNpdGl2ZSB0byB1cHBlci9sb3dlciBjYXNlLgoKICAgIElmIGp1c3QgdGVzdGluZyBmb3IgYGBjbGFzc2BgICh3aXRoIG9yIHdpdGhvdXQgYSBuYW1lc3BhY2UpLCB1c2UKICAgIDpjbGFzczpgd2l0aENsYXNzYC4KCiAgICBUbyB2ZXJpZnkgdGhhdCB0aGUgYXR0cmlidXRlIGV4aXN0cywgYnV0IHdpdGhvdXQgc3BlY2lmeWluZyBhIHZhbHVlLAogICAgcGFzcyBgYHdpdGhBdHRyaWJ1dGUuQU5ZX1ZBTFVFYGAgYXMgdGhlIHZhbHVlLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBodG1sID0gJycnCiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIFNvbWUgdGV4dAogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyaWQiPjEgNCAwIDEgMDwvZGl2PgogICAgICAgICAgICA8ZGl2IHR5cGU9ImdyYXBoIj4xLDMgMiwzIDEsMTwvZGl2PgogICAgICAgICAgICA8ZGl2PnRoaXMgaGFzIG5vIHR5cGU8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICcnJwogICAgICAgIGRp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IHdoZW4gdXNpbmcgaW5maXhOb3RhdGlvbi4gU2VlCiAgICA6Y2xhc3M6YFBhcnNlckVsZW1lbnQuZW5hYmxlUGFja3JhdGAgZm9yIGEgbWVjaGFuaXNtIHRvIHBvdGVudGlhbGx5CiAgICBpbXByb3ZlIHlvdXIgcGFyc2VyIHBlcmZvcm1hbmNlLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBiYXNlRXhwciAtIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBtb3N0IGJhc2ljIGVsZW1lbnQgZm9yIHRoZQogICAgICAgbmVzdGVkCiAgICAgLSBvcExpc3QgLSBsaXN0IG9mIHR1cGxlcywgb25lIGZvciBlYWNoIG9wZXJhdG9yIHByZWNlZGVuY2UgbGV2ZWwKICAgICAgIGluIHRoZSBleHByZXNzaW9uIGdyYW1tYXI7IGVhY2ggdHVwbGUgaXMgb2YgdGhlIGZvcm0gYGAob3BFeHByLAogICAgICAgbnVtVGVybXMsIHJpZ2h0TGVmdEFzc29jLCBwYXJzZUFjdGlvbilgYCwgd2hlcmU6CgogICAgICAgLSBvcEV4cHIgaXMgdGhlIHB5cGFyc2luZyBleHByZXNzaW9uIGZvciB0aGUgb3BlcmF0b3I7IG1heSBhbHNvCiAgICAgICAgIGJlIGEgc3RyaW5nLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIExpdGVyYWw7IGlmIG51bVRlcm1zCiAgICAgICAgIGlzIDMsIG9wRXhwciBpcyBhIHR1cGxlIG9mIHR3byBleHByZXNzaW9ucywgZm9yIHRoZSB0d28KICAgICAgICAgb3BlcmF0b3JzIHNlcGFyYXRpbmcgdGhlIDMgdGVybXMKICAgICAgIC0gbnVtVGVybXMgaXMgdGhlIG51bWJlciBvZiB0ZXJtcyBmb3IgdGhpcyBvcGVyYXRvciAobXVzdCBiZSAxLAogICAgICAgICAyLCBvciAzKQogICAgICAgLSByaWdodExlZnRBc3NvYyBpcyB0aGUgaW5kaWNhdG9yIHdoZXRoZXIgdGhlIG9wZXJhdG9yIGlzIHJpZ2h0CiAgICAgICAgIG9yIGxlZnQgYXNzb2NpYXRpdmUsIHVzaW5nIHRoZSBweXBhcnNpbmctZGVmaW5lZCBjb25zdGFudHMKICAgICAgICAgYGBvcEFzc29jLlJJR0hUYGAgYW5kIGBgb3BBc3NvYy5MRUZUYGAuCiAgICAgICAtIHBhcnNlQWN0aW9uIGlzIHRoZSBwYXJzZSBhY3Rpb24gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIGV4cHJlc3Npb25zIG1hdGNoaW5nIHRoaXMgb3BlcmF0b3IgZXhwcmVzc2lvbiAodGhlIHBhcnNlIGFjdGlvbgogICAgICAgICB0dXBsZSBtZW1iZXIgbWF5IGJlIG9taXR0ZWQpOyBpZiB0aGUgcGFyc2UgYWN0aW9uIGlzIHBhc3NlZAogICAgICAgICBhIHR1cGxlIG9yIGxpc3Qgb2YgZnVuY3Rpb25zLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZwogICAgICAgICBgYHNldFBhcnNlQWN0aW9uKCpmbilgYAogICAgICAgICAoOmNsYXNzOmBQYXJzZXJFbGVtZW50LnNldFBhcnNlQWN0aW9uYCkKICAgICAtIGxwYXIgLSBleHByZXNzaW9uIGZvciBtYXRjaGluZyBsZWZ0LXBhcmVudGhlc2VzCiAgICAgICAoZGVmYXVsdD0gYGBTdXBwcmVzcygnKCcpYGApCiAgICAgLSBycGFyIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgcmlnaHQtcGFyZW50aGVzZXMKICAgICAgIChkZWZhdWx0PSBgYFN1cHByZXNzKCcpJylgYCkKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgIyBzaW1wbGUgZXhhbXBsZSBvZiBmb3VyLWZ1bmN0aW9uIGFyaXRobWV0aWMgd2l0aCBpbnRzIGFuZAogICAgICAgICMgdmFyaWFibGUgbmFtZXMKICAgICAgICBpbnRlZ2VyID0gcHlwYXJzaW5nX2NvbW1vbi5zaWduZWRfaW50ZWdlcgogICAgICAgIHZhcm5hbWUgPSBweXBhcnNpbmdfY29tbW9uLmlkZW50aWZpZXIKCiAgICAgICAgYXJpdGhfZXhwciA9IGluZml4Tm90YXRpb24oaW50ZWdlciB8IHZhcm5hbWUsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgKCctJywgMSwgb3BBc3NvYy5SSUdIVCksCiAgICAgICAgICAgIChvbmVPZignKiAvJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIChvbmVPZignKyAtJyksIDIsIG9wQXNzb2MuTEVGVCksCiAgICAgICAgICAgIF0pCgogICAgICAgIGFyaXRoX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgIDUrMyo2CiAgICAgICAgICAgICg1KzMpKjYKICAgICAgICAgICAgLTItLTExCiAgICAgICAgICAgICcnJywgZnVsbER1bXA9RmFsc2UpCgogICAgcHJpbnRzOjoKCiAgICAgICAgNSszKjYKICAgICAgICBbWzUsICcrJywgWzMsICcqJywgNl1dXQoKICAgICAgICAoNSszKSo2CiAgICAgICAgW1tbNSwgJysnLCAzXSwgJyonLCA2XV0KCiAgICAgICAgLTItLTExCiAgICAgICAgW1tbJy0nLCAyXSwgJy0nLCBbJy0nLCAxMV1dXQogICAgYwAAAAAAAAAAAAAAAAAAAAADAAAAQAAAAHMWAAAAZQBaAWQAWgJkBWQCZAOEAVoDZARTACkGehppbmZpeE5vdGF0aW9uLjxsb2NhbHM+Ll9GQlRjBAAAAAAAAAAAAAAABAAAAAQAAABTAAAAcxYAAAB8AGoAoAF8AXwCoQIBAHwCZwBmAlMAcqkAAAApAnK+AQAAcjYCAAByJQIAAHISAAAAchIAAAByEwAAAHLxAAAArRcAAHMEAAAAAAEOAXokaW5maXhOb3RhdGlvbi48bG9jYWxzPi5fRkIucGFyc2VJbXBsTikBVHLjAgAAchIAAAByEgAAAHISAAAAchMAAADaA19GQqwXAABzAgAAAAgBcicEAAByqQAAAE5yDQMAAHKUAAAAegclcyB0ZXJtegklcyVzIHRlcm1ylgAAAHpAaWYgbnVtdGVybXM9Mywgb3BFeHByIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0IG9mIHR3byBleHByZXNzaW9uc3KsAAAAejZvcGVyYXRvciBtdXN0IGJlIHVuYXJ5ICgxKSwgYmluYXJ5ICgyKSwgb3IgdGVybmFyeSAoMyl6Mm9wZXJhdG9yIG11c3QgaW5kaWNhdGUgcmlnaHQgb3IgbGVmdCBhc3NvY2lhdGl2aXR5KRFyLQAAAHIuAAAAcvwAAABy2wAAAHKMAgAAcgACAABydQAAANoETEVGVHIwAAAAcjkAAADaBVJJR0hUcp0AAAByOwAAAHK+AQAAcosCAAByKgEAAHKkAAAAKRLaCGJhc2VFeHBy2gZvcExpc3TaBGxwYXLaBHJwYXJyJwQAAHKnAAAA2ghsYXN0RXhwcnIGAQAA2gdvcGVyRGVm2gZvcEV4cHLaBWFyaXR52g5yaWdodExlZnRBc3NvY3LHAAAA2gh0ZXJtTmFtZdoHb3BFeHByMdoHb3BFeHByMtoIdGhpc0V4cHJy7QMAAHISAAAAchIAAAByEwAAAHKKAAAAZBcAAHNgAAAAAEgQBQYBEAESARgBGAEIARQBAgEC/wQCCAEMAQwBCAEeAQoBCgEmAh4BCgEWARr/BgMKAQwBCgIMAQgBHAEKAQoBJgIeAQoBFgEW/wYDCgIIAQYBEAEMAgoBEgEGAQgBcooAAAB6NCIoPzpbXiJcblxyXFxdfCg/OiIiKXwoPzpcXCg/OlteeF18eFswLTlhLWZBLUZdKykpKSr6ASJ6IHN0cmluZyBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzejQnKD86W14nXG5cclxcXXwoPzonJyl8KD86XFwoPzpbXnhdfHhbMC05YS1mQS1GXSspKSkq+gEneiBzdHJpbmcgZW5jbG9zZWQgaW4gc2luZ2xlIHF1b3Rlc3oqcXVvdGVkU3RyaW5nIHVzaW5nIHNpbmdsZSBvciBkb3VibGUgcXVvdGVz2gF1ehZ1bmljb2RlIHN0cmluZyBsaXRlcmFsYwQAAAAAAAAAAAAAAAUAAAAHAAAAQwAAAHOeAQAAfAB8AWsCchB0AGQBgwGCAXwCZAJ1AJABcip0AXwAdAKDApABciJ0AXwBdAKDApABciJ0A3wAgwFkA2sCcqh0A3wBgwFkA2sCcqh8A2QCdQFygnQEdAV8Aw8AdAZ8AHwBFwB0B2oIFwBkA2QEjQIXAIMBgwGgCWQFZAaEAKEBfQJuJHQKoAuhAHQGfAB8ARcAdAdqCBcAgwGgCWQHZAaEAKEBFwB9Am54fANkAnUBcux0BHQFfAMPAHQMfACDAQ8AFwB0DHwBgwEPABcAdAZ0B2oIZANkBI0CFwCDAYMBoAlkCGQGhAChAX0CbjR0BHQFdAx8AIMBDwB0DHwBgwEPABcAdAZ0B2oIZANkBI0CFwCDAYMBoAlkCWQGhAChAX0Cbgh0AGQKgwGCAXQNgwB9BHwDZAJ1AZABcmR8BHQOdA98AIMBdBB8A3wEQgB8AkIAgwEXAHQPfAGDARcAgwFLAH0EbiR8BHQOdA98AIMBdBB8BHwCQgCDARcAdA98AYMBFwCDAUsAfQR8BKARZAt8AHwBZgIWAKEBAQB8BFMAKQxhlwkAAEhlbHBlciBtZXRob2QgZm9yIGRlZmluaW5nIG5lc3RlZCBsaXN0cyBlbmNsb3NlZCBpbiBvcGVuaW5nIGFuZAogICAgY2xvc2luZyBkZWxpbWl0ZXJzICgiKCIgYW5kICIpIiBhcmUgdGhlIGRlZmF1bHQpLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBvcGVuZXIgLSBvcGVuaW5nIGNoYXJhY3RlciBmb3IgYSBuZXN0ZWQgbGlzdAogICAgICAgKGRlZmF1bHQ9IGBgIigiYGApOyBjYW4gYWxzbyBiZSBhIHB5cGFyc2luZyBleHByZXNzaW9uCiAgICAgLSBjbG9zZXIgLSBjbG9zaW5nIGNoYXJhY3RlciBmb3IgYSBuZXN0ZWQgbGlzdAogICAgICAgKGRlZmF1bHQ9IGBgIikiYGApOyBjYW4gYWxzbyBiZSBhIHB5cGFyc2luZyBleHByZXNzaW9uCiAgICAgLSBjb250ZW50IC0gZXhwcmVzc2lvbiBmb3IgaXRlbXMgd2l0aGluIHRoZSBuZXN0ZWQgbGlzdHMKICAgICAgIChkZWZhdWx0PSBgYE5vbmVgYCkKICAgICAtIGlnbm9yZUV4cHIgLSBleHByZXNzaW9uIGZvciBpZ25vcmluZyBvcGVuaW5nIGFuZCBjbG9zaW5nCiAgICAgICBkZWxpbWl0ZXJzIChkZWZhdWx0PSA6Y2xhc3M6YHF1b3RlZFN0cmluZ2ApCgogICAgSWYgYW4gZXhwcmVzc2lvbiBpcyBub3QgcHJvdmlkZWQgZm9yIHRoZSBjb250ZW50IGFyZ3VtZW50LCB0aGUKICAgIG5lc3RlZCBleHByZXNzaW9uIHdpbGwgY2FwdHVyZSBhbGwgd2hpdGVzcGFjZS1kZWxpbWl0ZWQgY29udGVudAogICAgYmV0d2VlbiBkZWxpbWl0ZXJzIGFzIGEgbGlzdCBvZiBzZXBhcmF0ZSB2YWx1ZXMuCgogICAgVXNlIHRoZSBgYGlnbm9yZUV4cHJgYCBhcmd1bWVudCB0byBkZWZpbmUgZXhwcmVzc2lvbnMgdGhhdCBtYXkKICAgIGNvbnRhaW4gb3BlbmluZyBvciBjbG9zaW5nIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMKICAgIG9wZW5pbmcgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIGZvciBuZXN0aW5nLCBzdWNoIGFzIHF1b3RlZFN0cmluZyBvcgogICAgYSBjb21tZW50IGV4cHJlc3Npb24uICBTcGVjaWZ5IG11bHRpcGxlIGV4cHJlc3Npb25zIHVzaW5nIGFuCiAgICA6Y2xhc3M6YE9yYCBvciA6Y2xhc3M6YE1hdGNoRmlyc3RgLiBUaGUgZGVmYXVsdCBpcwogICAgOmNsYXNzOmBxdW90ZWRTdHJpbmdgLCBidXQgaWYgbm8gZXhwcmVzc2lvbnMgYXJlIHRvIGJlIGlnbm9yZWQsIHRoZW4KICAgIHBhc3MgYGBOb25lYGAgZm9yIHRoaXMgYXJndW1lbnQuCgogICAgRXhhbXBsZTo6CgogICAgICAgIGRhdGFfdHlwZSA9IG9uZU9mKCJ2b2lkIGludCBzaG9ydCBsb25nIGNoYXIgZmxvYXQgZG91YmxlIikKICAgICAgICBkZWNsX2RhdGFfdHlwZSA9IENvbWJpbmUoZGF0YV90eXBlICsgT3B0aW9uYWwoV29yZCgnKicpKSkKICAgICAgICBpZGVudCA9IFdvcmQoYWxwaGFzKydfJywgYWxwaGFudW1zKydfJykKICAgICAgICBudW1iZXIgPSBweXBhcnNpbmdfY29tbW9uLm51bWJlcgogICAgICAgIGFyZyA9IEdyb3VwKGRlY2xfZGF0YV90eXBlICsgaWRlbnQpCiAgICAgICAgTFBBUiwgUlBBUiA9IG1hcChTdXBwcmVzcywgIigpIikKCiAgICAgICAgY29kZV9ib2R5ID0gbmVzdGVkRXhwcigneycsICd9JywgaWdub3JlRXhwcj0ocXVvdGVkU3RyaW5nIHwgY1N0eWxlQ29tbWVudCkpCgogICAgICAgIGNfZnVuY3Rpb24gPSAoZGVjbF9kYXRhX3R5cGUoInR5cGUiKQogICAgICAgICAgICAgICAgICAgICAgKyBpZGVudCgibmFtZSIpCiAgICAgICAgICAgICAgICAgICAgICArIExQQVIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KGFyZyksIFtdKSgiYXJncyIpICsgUlBBUgogICAgICAgICAgICAgICAgICAgICAgKyBjb2RlX2JvZHkoImJvZHkiKSkKICAgICAgICBjX2Z1bmN0aW9uLmlnbm9yZShjU3R5bGVDb21tZW50KQoKICAgICAgICBzb3VyY2VfY29kZSA9ICcnJwogICAgICAgICAgICBpbnQgaXNfb2RkKGludCB4KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKHglMik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGludCBkZWNfdG9faGV4KGNoYXIgaGNoYXIpIHsKICAgICAgICAgICAgICAgIGlmIChoY2hhciA+PSAnMCcgJiYgaGNoYXIgPD0gJzknKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvcmQoaGNoYXIpLW9yZCgnMCcpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgxMCtvcmQoaGNoYXIpLW9yZCgnQScpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICcnJwogICAgICAgIGZvciBmdW5jIGluIGNfZnVuY3Rpb24uc2VhcmNoU3RyaW5nKHNvdXJjZV9jb2RlKToKICAgICAgICAgICAgcHJpbnQoIiUobmFtZSlzICglKHR5cGUpcykgYXJnczogJShhcmdzKXMiICUgZnVuYykKCgogICAgcHJpbnRzOjoKCiAgICAgICAgaXNfb2RkIChpbnQpIGFyZ3M6IFtbJ2ludCcsICd4J11dCiAgICAgICAgZGVjX3RvX2hleCAoaW50KSBhcmdzOiBbWydjaGFyJywgJ2hjaGFyJ11dCiAgICB6Lm9wZW5pbmcgYW5kIGNsb3Npbmcgc3RyaW5ncyBjYW5ub3QgYmUgdGhlIHNhbWVOcqwAAABy8QMAAGMBAAAAAAAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAKAAoQBTAHIaAQAAqQFy4wAAAHKaAAAAchIAAAByEgAAAHITAAAAcpwAAAA7GAAAchQAAAB6HG5lc3RlZEV4cHIuPGxvY2Fscz4uPGxhbWJkYT5jAQAAAAAAAAAAAAAAAQAAAAIAAABTAAAAcwwAAAB8AGQBGQCgAKEAUwByGgEAAHI6BAAAcpoAAAByEgAAAHISAAAAchMAAABynAAAAEAYAAByFAAAAGMBAAAAAAAAAAAAAAABAAAAAgAAAFMAAABzDAAAAHwAZAEZAKAAoQBTAHIaAQAAcjoEAABymgAAAHISAAAAchIAAAByEwAAAHKcAAAARxgAAHIUAAAAYwEAAAAAAAAAAAAAAAEAAAACAAAAUwAAAHMMAAAAfABkARkAoAChAFMAchoBAAByOgQAAHKaAAAAchIAAAByEgAAAHITAAAAcpwAAABMGAAAchQAAAB6T29wZW5pbmcgYW5kIGNsb3NpbmcgYXJndW1lbnRzIG11c3QgYmUgc3RyaW5ncyBpZiBubyBjb250ZW50IGV4cHJlc3Npb24gaXMgZ2l2ZW56Fm5lc3RlZCAlcyVzIGV4cHJlc3Npb24pEnKMAgAAcp0AAAByLwEAAHLbAAAAcikAAAByOQAAAHIoAAAAckQAAABy3wEAAHKkAAAAcmQAAABybAEAAHI0AAAAci4AAAByMAAAAHJLAAAAclIAAAByAAIAACkF2gZvcGVuZXLaBmNsb3NlctoHY29udGVudHKkAwAAcqcAAAByEgAAAHISAAAAchMAAABycQAAAO8XAABzYAAAAABBCAEIAQoBGAEYAQgBCAEEAQL/AgIE/gICAv4E/wgFBvsGBwoBAv8CAgT+BgMG/QgFCAEIAQj/AgII/gIDDP0IBAb8BgYMAQj/AgIM/ggDBv0GBQgBBgEKASoCJAESAXJxAAAAYwMAAAAAAAAAAAAAAAsAAAAGAAAAAwAAAHMmAQAAiAFkAWQBhQIZAIkAhwCHAWYCZAJkA4QIiQKHAWYBZARkBYQIfQOHAWYBZAZkB4QIfQSHAWYBZAhkCYQIfQV0AHQBgwCgAmQKoQGgA6EAdASDAGQLjQJ9BnQFgwB0BYMAoAZ8BKEBFwCgB2QMoQF9B3QFgwCgBnwDoQGgB2QNoQF9CHQFgwCgBnwFoQGgB2QOoQF9CXwCcsx0CHQJfAaDAXwHFwB0AHwIdAh8AIMBFwB0CXwGgwEXAHQEgwBkC40CFwB8CRcAgwF9Cm4udAh0CXwGgwF0AHwIdAh8AIMBFwB0CXwGgwEXAHQEgwBkC40CFwB8CRcAgwF9CnwKoAqHAmYBZA9kEIQIoQEBAHwAoAt0DHQBgwAXAKEBAQB8CqAHZBGhAVMAKRJh5ggAAEhlbHBlciBtZXRob2QgZm9yIGRlZmluaW5nIHNwYWNlLWRlbGltaXRlZCBpbmRlbnRhdGlvbiBibG9ja3MsCiAgICBzdWNoIGFzIHRob3NlIHVzZWQgdG8gZGVmaW5lIGJsb2NrIHN0YXRlbWVudHMgaW4gUHl0aG9uIHNvdXJjZSBjb2RlLgoKICAgIFBhcmFtZXRlcnM6CgogICAgIC0gYmxvY2tTdGF0ZW1lbnRFeHByIC0gZXhwcmVzc2lvbiBkZWZpbmluZyBzeW50YXggb2Ygc3RhdGVtZW50IHRoYXQKICAgICAgIGlzIHJlcGVhdGVkIHdpdGhpbiB0aGUgaW5kZW50ZWQgYmxvY2sKICAgICAtIGluZGVudFN0YWNrIC0gbGlzdCBjcmVhdGVkIGJ5IGNhbGxlciB0byBtYW5hZ2UgaW5kZW50YXRpb24gc3RhY2sKICAgICAgIChtdWx0aXBsZSBzdGF0ZW1lbnRXaXRoSW5kZW50ZWRCbG9jayBleHByZXNzaW9ucyB3aXRoaW4gYSBzaW5nbGUKICAgICAgIGdyYW1tYXIgc2hvdWxkIHNoYXJlIGEgY29tbW9uIGluZGVudFN0YWNrKQogICAgIC0gaW5kZW50IC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYmxvY2sgbXVzdCBiZSBpbmRlbnRlZCBiZXlvbmQKICAgICAgIHRoZSBjdXJyZW50IGxldmVsOyBzZXQgdG8gRmFsc2UgZm9yIGJsb2NrIG9mIGxlZnQtbW9zdAogICAgICAgc3RhdGVtZW50cyAoZGVmYXVsdD0gYGBUcnVlYGApCgogICAgQSB2YWxpZCBibG9jayBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGBgYmxvY2tTdGF0ZW1lbnRgYC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGF0YSA9ICcnJwogICAgICAgIGRlZiBBKHopOgogICAgICAgICAgQTEKICAgICAgICAgIEIgPSAxMDAKICAgICAgICAgIEcgPSBBMgogICAgICAgICAgQTIKICAgICAgICAgIEEzCiAgICAgICAgQgogICAgICAgIGRlZiBCQihhLGIsYyk6CiAgICAgICAgICBCQjEKICAgICAgICAgIGRlZiBCQkEoKToKICAgICAgICAgICAgYmJhMQogICAgICAgICAgICBiYmEyCiAgICAgICAgICAgIGJiYTMKICAgICAgICBDCiAgICAgICAgRAogICAgICAgIGRlZiBzcGFtKHgseSk6CiAgICAgICAgICAgICBkZWYgZWdncyh6KToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgJycnCgoKICAgICAgICBpbmRlbnRTdGFjayA9IFsxXQogICAgICAgIHN0bXQgPSBGb3J3YXJkKCkKCiAgICAgICAgaWRlbnRpZmllciA9IFdvcmQoYWxwaGFzLCBhbHBoYW51bXMpCiAgICAgICAgZnVuY0RlY2wgPSAoImRlZiIgKyBpZGVudGlmaWVyICsgR3JvdXAoIigiICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChpZGVudGlmaWVyKSkgKyAiKSIpICsgIjoiKQogICAgICAgIGZ1bmNfYm9keSA9IGluZGVudGVkQmxvY2soc3RtdCwgaW5kZW50U3RhY2spCiAgICAgICAgZnVuY0RlZiA9IEdyb3VwKGZ1bmNEZWNsICsgZnVuY19ib2R5KQoKICAgICAgICBydmFsdWUgPSBGb3J3YXJkKCkKICAgICAgICBmdW5jQ2FsbCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiKCIgKyBPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHJ2YWx1ZSkpICsgIikiKQogICAgICAgIHJ2YWx1ZSA8PCAoZnVuY0NhbGwgfCBpZGVudGlmaWVyIHwgV29yZChudW1zKSkKICAgICAgICBhc3NpZ25tZW50ID0gR3JvdXAoaWRlbnRpZmllciArICI9IiArIHJ2YWx1ZSkKICAgICAgICBzdG10IDw8IChmdW5jRGVmIHwgYXNzaWdubWVudCB8IGlkZW50aWZpZXIpCgogICAgICAgIG1vZHVsZV9ib2R5ID0gT25lT3JNb3JlKHN0bXQpCgogICAgICAgIHBhcnNlVHJlZSA9IG1vZHVsZV9ib2R5LnBhcnNlU3RyaW5nKGRhdGEpCiAgICAgICAgcGFyc2VUcmVlLnBwcmludCgpCgogICAgcHJpbnRzOjoKCiAgICAgICAgW1snZGVmJywKICAgICAgICAgICdBJywKICAgICAgICAgIFsnKCcsICd6JywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0ExJ10sIFtbJ0InLCAnPScsICcxMDAnXV0sIFtbJ0cnLCAnPScsICdBMiddXSwgWydBMiddLCBbJ0EzJ11dXSwKICAgICAgICAgJ0InLAogICAgICAgICBbJ2RlZicsCiAgICAgICAgICAnQkInLAogICAgICAgICAgWycoJywgJ2EnLCAnYicsICdjJywgJyknXSwKICAgICAgICAgICc6JywKICAgICAgICAgIFtbJ0JCMSddLCBbWydkZWYnLCAnQkJBJywgWycoJywgJyknXSwgJzonLCBbWydiYmExJ10sIFsnYmJhMiddLCBbJ2JiYTMnXV1dXV1dLAogICAgICAgICAnQycsCiAgICAgICAgICdEJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ3NwYW0nLAogICAgICAgICAgWycoJywgJ3gnLCAneScsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbW1snZGVmJywgJ2VnZ3MnLCBbJygnLCAneicsICcpJ10sICc6JywgW1sncGFzcyddXV1dXV1dCiAgICBOYwAAAAAAAAAAAAAAAAAAAAAEAAAAEwAAAHMQAAAAiACIAWQAZACFAjwAZABTAHKpAAAAchIAAAByEgAAACkC2gxiYWNrdXBfc3RhY2vaC2luZGVudFN0YWNrchIAAAByEwAAANoLcmVzZXRfc3RhY2uqGAAAcwIAAAAAAXoiaW5kZW50ZWRCbG9jay48bG9jYWxzPi5yZXNldF9zdGFja2MDAAAAAAAAAAAAAAAEAAAABAAAABMAAABzTgAAAHwBdAB8AIMBawVyEGQAUwB0AXwBfACDAn0DfAOIAGQBGQBrA3JKfAOIAGQBGQBrBHI+dAJ8AHwBZAKDA4IBdAJ8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PGlwdjRfYWRkcmVzcz5gLCA6Y2xhc3M6YElQdjY8aXB2Nl9hZGRyZXNzPmApCiAgICAgLSBJU084NjAxIDpjbGFzczpgZGF0ZXM8aXNvODYwMV9kYXRlPmAgYW5kCiAgICAgICA6Y2xhc3M6YGRhdGV0aW1lPGlzbzg2MDFfZGF0ZXRpbWU+YAogICAgIC0gOmNsYXNzOmBVVUlEPHV1aWQ+YAogICAgIC0gOmNsYXNzOmBjb21tYS1zZXBhcmF0ZWQgbGlzdDxjb21tYV9zZXBhcmF0ZWRfbGlzdD5gCgogICAgUGFyc2UgYWN0aW9uczoKCiAgICAgLSA6Y2xhc3M6YGNvbnZlcnRUb0ludGVnZXJgCiAgICAgLSA6Y2xhc3M6YGNvbnZlcnRUb0Zsb2F0YAogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9EYXRlYAogICAgIC0gOmNsYXNzOmBjb252ZXJ0VG9EYXRldGltZWAKICAgICAtIDpjbGFzczpgc3RyaXBIVE1MVGFnc2AKICAgICAtIDpjbGFzczpgdXBjYXNlVG9rZW5zYAogICAgIC0gOmNsYXNzOmBkb3duY2FzZVRva2Vuc2AKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgKzEwMAogICAgICAgICAgICAzLjE0MTU5CiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmZudW1iZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgZmxvYXQKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIC0xMDAKICAgICAgICAgICAgKzEwMAogICAgICAgICAgICAzLjE0MTU5CiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLmhleF9pbnRlZ2VyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIGhleCBudW1iZXJzCiAgICAgICAgICAgIDEwMAogICAgICAgICAgICBGRgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uZnJhY3Rpb24ucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgZnJhY3Rpb25zCiAgICAgICAgICAgIDEvMgogICAgICAgICAgICAtMy80CiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5taXhlZF9pbnRlZ2VyLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgICAgICAxCiAgICAgICAgICAgIDEvMgogICAgICAgICAgICAtMy80CiAgICAgICAgICAgIDEtMy80CiAgICAgICAgICAgICcnJykKCiAgICAgICAgaW1wb3J0IHV1aWQKICAgICAgICBweXBhcnNpbmdfY29tbW9uLnV1aWQuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAodXVpZC5VVUlEKSkKICAgICAgICBweXBhcnNpbmdfY29tbW9uLnV1aWQucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgdXVpZAogICAgICAgICAgICAxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgKICAgICAgICAgICAgJycnKQoKICAgIHByaW50czo6CgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUKICAgICAgICAxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDBdCgogICAgICAgICsxMDAKICAgICAgICBbMTAwXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGFueSBpbnQgb3IgcmVhbCBudW1iZXIsIHJldHVybmVkIGFzIGZsb2F0CiAgICAgICAgMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAtMTAwCiAgICAgICAgWy0xMDAuMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDAuMF0KCiAgICAgICAgMy4xNDE1OQogICAgICAgIFszLjE0MTU5XQoKICAgICAgICA2LjAyZTIzCiAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAxZS0xMgogICAgICAgIFsxZS0xMl0KCiAgICAgICAgIyBoZXggbnVtYmVycwogICAgICAgIDEwMAogICAgICAgIFsyNTZdCgogICAgICAgIEZGCiAgICAgICAgWzI1NV0KCiAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAxLzIKICAgICAgICBbMC41XQoKICAgICAgICAtMy80CiAgICAgICAgWy0wLjc1XQoKICAgICAgICAjIG1peGVkIGZyYWN0aW9ucwogICAgICAgIDEKICAgICAgICBbMV0KCiAgICAgICAgMS8yCiAgICAgICAgWzAuNV0KCiAgICAgICAgLTMvNAogICAgICAgIFstMC43NV0KCiAgICAgICAgMS0zLzQKICAgICAgICBbMS43NV0KCiAgICAgICAgIyB1dWlkCiAgICAgICAgMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CiAgICAgICAgW1VVSUQoJzEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OCcpXQogICAg2gdpbnRlZ2VyegtoZXggaW50ZWdlcnLtAAAAeghbKy1dP1xkK3oOc2lnbmVkIGludGVnZXJyCAQAANoIZnJhY3Rpb25jAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcxAAAAB8AGQBGQB8AGQCGQAbAFMAKQNOcgEAAABylwAAAHISAAAAcpoAAAByEgAAAHISAAAAchMAAABynAAAAKQZAAByFAAAAHoZcHlwYXJzaW5nX2NvbW1vbi48bGFtYmRhPnJWAwAAeiJmcmFjdGlvbiBvciBtaXhlZCBpbnRlZ2VyLWZyYWN0aW9uehdbKy1dPyg/OlxkK1wuXGQqfFwuXGQrKXoLcmVhbCBudW1iZXJ6QFsrLV0/KD86XGQrKD86W2VFXVsrLV0/XGQrKXwoPzpcZCtcLlxkKnxcLlxkKykoPzpbZUVdWystXT9cZCspPyl6JHJlYWwgbnVtYmVyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbnodWystXT9cZCtcLj9cZCooW2VFXVsrLV0/XGQrKT/aB2ZudW1iZXJyjgMAANoKaWRlbnRpZmllcnpLKDI1WzAtNV18MlswLTRdWzAtOV18MT9bMC05XXsxLDJ9KShcLigyNVswLTVdfDJbMC00XVswLTldfDE/WzAtOV17MSwyfSkpezN9egxJUHY0IGFkZHJlc3N6EFswLTlhLWZBLUZdezEsNH3aC2hleF9pbnRlZ2VycgsEAADpBwAAAHoRZnVsbCBJUHY2IGFkZHJlc3MpAnIBAAAActIBAAB6Ajo6ehJzaG9ydCBJUHY2IGFkZHJlc3NjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcxYAAAB0AGQBZAKEAHwARACDAYMBZANrAFMAKQROYwEAAAAAAAAAAAAAAAIAAAAEAAAAcwAAAHMeAAAAfABdFn0BdABqAaACfAGhAXICZABWAAEAcQJkAVMAcooBAAApA3KPAAAA2gpfaXB2Nl9wYXJ0cmwCAAByzQMAAHISAAAAchIAAAByEwAAAHKrAAAAxBkAAHIUAAAAeixweXBhcnNpbmdfY29tbW9uLjxsYW1iZGE+Ljxsb2NhbHM+LjxnZW5leHByPnLzAwAAKQFyfgMAAHKaAAAAchIAAAByEgAAAHITAAAAcpwAAADEGQAAchQAAAB6Bzo6ZmZmZjp6Em1peGVkIElQdjYgYWRkcmVzc3oMSVB2NiBhZGRyZXNzejpbMC05YS1mQS1GXXsyfShbOi4tXSlbMC05YS1mQS1GXXsyfSg/OlwxWzAtOWEtZkEtRl17Mn0pezR9egtNQUMgYWRkcmVzc/oIJVktJW0tJWRjAQAAAAAAAAAAAAAAAgAAAAMAAAADAAAAcxAAAACHAGYBZAFkAoQIfQF8AVMAKQNh3QEAAAogICAgICAgIEhlbHBlciB0byBjcmVhdGUgYSBwYXJzZSBhY3Rpb24gZm9yIGNvbnZlcnRpbmcgcGFyc2VkIGRhdGUgc3RyaW5nIHRvIFB5dGhvbiBkYXRldGltZS5kYXRlCgogICAgICAgIFBhcmFtcyAtCiAgICAgICAgIC0gZm10IC0gZm9ybWF0IHRvIGJlIHBhc3NlZCB0byBkYXRldGltZS5zdHJwdGltZSAoZGVmYXVsdD0gYGAiJVktJW0tJWQiYGApCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgZGF0ZV9leHByID0gcHlwYXJzaW5nX2NvbW1vbi5pc284NjAxX2RhdGUuY29weSgpCiAgICAgICAgICAgIGRhdGVfZXhwci5zZXRQYXJzZUFjdGlvbihweXBhcnNpbmdfY29tbW9uLmNvbnZlcnRUb0RhdGUoKSkKICAgICAgICAgICAgcHJpbnQoZGF0ZV9leHByLnBhcnNlU3RyaW5nKCIxOTk5LTEyLTMxIikpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBbZGF0ZXRpbWUuZGF0ZSgxOTk5LCAxMiwgMzEpXQogICAgICAgIGMDAAAAAAAAAAAAAAAEAAAACgAAABMAAABzUAAAAHoWdACgAXwCZAEZAIgAoQKgAqEAVwBTAAQAdAN5SgEAfQMBAHocdAR8AHwBdAV8A4MBgwOCAVcAWQBkAH0DfgNuCmQAfQN+AzAAMABkAFMAchoBAAApBnIDAAAA2ghzdHJwdGltZdoEZGF0ZXKMAgAAcj8AAABynwAAAKkEcq8AAABywgAAAHKbAAAA2gJ2ZakB2gNmbXRyEgAAAHITAAAA2gZjdnRfZm7eGQAAcwgAAAAAAQIBFgEOAXoucHlwYXJzaW5nX2NvbW1vbi5jb252ZXJ0VG9EYXRlLjxsb2NhbHM+LmN2dF9mbnISAAAAqQJyXgQAAHJfBAAAchIAAAByXQQAAHITAAAA2g1jb252ZXJ0VG9EYXRlzBkAAHMEAAAAABIMBXoecHlwYXJzaW5nX2NvbW1vbi5jb252ZXJ0VG9EYXRl+hQlWS0lbS0lZFQlSDolTTolUy4lZmMBAAAAAAAAAAAAAAACAAAAAwAAAAMAAABzEAAAAIcAZgFkAWQChAh9AXwBUwApA2EXAgAASGVscGVyIHRvIGNyZWF0ZSBhIHBhcnNlIGFjdGlvbiBmb3IgY29udmVydGluZyBwYXJzZWQKICAgICAgICBkYXRldGltZSBzdHJpbmcgdG8gUHl0aG9uIGRhdGV0aW1lLmRhdGV0aW1lCgogICAgICAgIFBhcmFtcyAtCiAgICAgICAgIC0gZm10IC0gZm9ybWF0IHRvIGJlIHBhc3NlZCB0byBkYXRldGltZS5zdHJwdGltZSAoZGVmYXVsdD0gYGAiJVktJW0tJWRUJUg6JU06JVMuJWYiYGApCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgZHRfZXhwciA9IHB5cGFyc2luZ19jb21tb24uaXNvODYwMV9kYXRldGltZS5jb3B5KCkKICAgICAgICAgICAgZHRfZXhwci5zZXRQYXJzZUFjdGlvbihweXBhcnNpbmdfY29tbW9uLmNvbnZlcnRUb0RhdGV0aW1lKCkpCiAgICAgICAgICAgIHByaW50KGR0X2V4cHIucGFyc2VTdHJpbmcoIjE5OTktMTItMzFUMjM6NTk6NTkuOTk5IikpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBbZGF0ZXRpbWUuZGF0ZXRpbWUoMTk5OSwgMTIsIDMxLCAyMywgNTksIDU5LCA5OTkwMDApXQogICAgICAgIGMDAAAAAAAAAAAAAAAEAAAACgAAABMAAABzTAAAAHoSdACgAXwCZAEZAIgAoQJXAFMABAB0AnlGAQB9AwEAehx0A3wAfAF0BHwDgwGDA4IBVwBZAGQAfQN+A24KZAB9A34DMAAwAGQAUwByGgEAACkFcgMAAAByWQQAAHKMAgAAcj8AAABynwAAAHJbBAAAcl0EAAByEgAAAHITAAAAcl8EAAD3GQAAcwgAAAAAAQIBEgEOAXoycHlwYXJzaW5nX2NvbW1vbi5jb252ZXJ0VG9EYXRldGltZS48bG9jYWxzPi5jdnRfZm5yEgAAAHJgBAAAchIAAAByXQQAAHITAAAA2hFjb252ZXJ0VG9EYXRldGltZeUZAABzBAAAAAASDAV6InB5cGFyc2luZ19jb21tb24uY29udmVydFRvRGF0ZXRpbWV6Nyg/UDx5ZWFyPlxkezR9KSg/Oi0oP1A8bW9udGg+XGRcZCkoPzotKD9QPGRheT5cZFxkKSk/KT96DElTTzg2MDEgZGF0ZXqGKD9QPHllYXI+XGR7NH0pLSg/UDxtb250aD5cZFxkKS0oP1A8ZGF5PlxkXGQpW1QgXSg/UDxob3VyPlxkXGQpOig/UDxtaW51dGU+XGRcZCkoOig/UDxzZWNvbmQ+XGRcZChcLlxkKik/KT8pPyg/UDx0ej5afFsrLV1cZFxkOj9cZFxkKT96EElTTzg2MDEgZGF0ZXRpbWV6MlswLTlhLWZBLUZdezh9KC1bMC05YS1mQS1GXXs0fSl7M30tWzAtOWEtZkEtRl17MTJ92gRVVUlEYwMAAAAAAAAAAAAAAAMAAAAEAAAAQwAAAHMQAAAAdABqAaACfAJkARkAoQFTACkCYRYCAABQYXJzZSBhY3Rpb24gdG8gcmVtb3ZlIEhUTUwgdGFncyBmcm9tIHdlYiBwYWdlIEhUTUwgc291cmNlCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgIyBzdHJpcCBIVE1MIGxpbmtzIGZyb20gbm9ybWFsIHRleHQKICAgICAgICAgICAgdGV4dCA9ICc8dGQ+TW9yZSBpbmZvIGF0IHRoZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vcHlwYXJzaW5nL3B5cGFyc2luZy93aWtpIj5weXBhcnNpbmc8L2E+IHdpa2kgcGFnZTwvdGQ+JwogICAgICAgICAgICB0ZCwgdGRfZW5kID0gbWFrZUhUTUxUYWdzKCJURCIpCiAgICAgICAgICAgIHRhYmxlX3RleHQgPSB0ZCArIFNraXBUbyh0ZF9lbmQpLnNldFBhcnNlQWN0aW9uKHB5cGFyc2luZ19jb21tb24uc3RyaXBIVE1MVGFncykoImJvZHkiKSArIHRkX2VuZAogICAgICAgICAgICBwcmludCh0YWJsZV90ZXh0LnBhcnNlU3RyaW5nKHRleHQpLmJvZHkpCgogICAgICAgIFByaW50czo6CgogICAgICAgICAgICBNb3JlIGluZm8gYXQgdGhlIHB5cGFyc2luZyB3aWtpIHBhZ2UKICAgICAgICByAQAAACkDco8AAADaDl9odG1sX3N0cmlwcGVycqUAAAApA3KvAAAAcsIAAAByMAIAAHISAAAAchIAAAByEwAAANoNc3RyaXBIVE1MVGFncwgaAABzAgAAAAAQeh5weXBhcnNpbmdfY29tbW9uLnN0cmlwSFRNTFRhZ3NywgMAAHL4AgAAck8EAAByUAQAAHK7AAAAcgkEAAB6FGNvbW1hIHNlcGFyYXRlZCBsaXN0YwEAAAAAAAAAAAAAAAEAAAACAAAAQwAAAHMMAAAAdAB8AIMBoAGhAFMAcqkAAAByAwQAAHKaAAAAchIAAAByEgAAAHITAAAAcpwAAAAjGgAAchQAAABjAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcwwAAAB0AHwAgwGgAaEAUwByqQAAAHIEBAAAcpoAAAByEgAAAHISAAAAchMAAABynAAAACYaAAByFAAAAE4pAXJYBAAAKQFyYgQAACk/cg8AAAByEAAAAHIRAAAAcusAAAByjgAAAHKZAAAA2hBjb252ZXJ0VG9JbnRlZ2Vy2gVmbG9hdNoOY29udmVydFRvRmxvYXRyTwAAAHJzAAAAcgACAABypAAAAHJRBAAAcmUAAAByVQQAAHJHAAAA2g5zaWduZWRfaW50ZWdlcnJSBAAAchgCAAByOwAAAHKaAgAA2g1taXhlZF9pbnRlZ2Vycn4DAADaBHJlYWzaCHNjaV9yZWFscmECAADaBm51bWJlcnJTBAAAclUAAAByVAAAAHJUBAAA2gxpcHY0X2FkZHJlc3NyVwQAANoSX2Z1bGxfaXB2Nl9hZGRyZXNz2hNfc2hvcnRfaXB2Nl9hZGRyZXNzchkCAADaE19taXhlZF9pcHY2X2FkZHJlc3NyKQAAANoMaXB2Nl9hZGRyZXNz2gttYWNfYWRkcmVzc3INAQAAcmEEAAByYwQAANoMaXNvODYwMV9kYXRl2hBpc284NjAxX2RhdGV0aW1l2gR1dWlkclgAAAByVwAAAHJlBAAAcmYEAAByOQAAAHI0AAAAcjIAAABydwAAAHJOAAAA2g1fY29tbWFzZXBpdGVtcmEAAAByegAAAHJsAQAA2hRjb21tYV9zZXBhcmF0ZWRfbGlzdHKFAAAAcmMAAAByEgAAAHISAAAAchIAAAByEwAAAHKPAAAA/hgAAHN2AAAACAEEfwARCAUIBRQDGgMUAyICDgIiAgoCFAMUBRADFAMYAw4DDgEWARIBAv8CAhL+BAMC/QQEDgEOARwDDgMCAQwYAgEMGA4DDgMOAxABAgEKEQwBBv8CAgr+AgMK/QwDAv0EBAoBAv8CAQL/CAIC/gQFEAMQAXKPAAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHMcAAAAZQBaAWQAWgJkAWQChABaA2QDZASEAFoEZAVTACkG2hJfbGF6eWNsYXNzcHJvcGVydHljAgAAAAAAAAAAAAAAAgAAAAIAAABDAAAAcxoAAAB8AXwAXwB8AWoBfABfAXwBagJ8AF8CZABTAHKpAAAAKQNyxQAAAHLrAAAAcg8AAAByGgIAAHISAAAAchIAAAByEwAAAHLSAAAAKxoAAHMGAAAAAAEGAQgBehtfbGF6eWNsYXNzcHJvcGVydHkuX19pbml0X19jAwAAAAAAAAAAAAAABAAAAAUAAAADAAAAc2wAAACIAGQAdQByEHQAfAGDAYkAdAGIAGQBgwJyOnQChwBmAWQCZAOECIgAagNkBGQAhQIZAEQAgwGDAXJAaQCIAF8EfABqBWoGfQN8A4gAagR2AXJifACgBYgAoQGIAGoEfAM8AIgAagR8AxkAUwApBU7aB19pbnRlcm5jAQAAAAAAAAAAAAAAAgAAAAYAAAAzAAAAcyAAAAB8AF0YfQGIAGoAdAF8AWQAZwCDA3UAVgABAHECZAFTACkCcnsEAABOKQJyewQAAHLbAQAAKQJyFwAAANoKc3VwZXJjbGFzc3LkAQAAchIAAAByEwAAAHKrAAAAMxoAAHMEAAAABAEC/3otX2xhenljbGFzc3Byb3BlcnR5Ll9fZ2V0X18uPGxvY2Fscz4uPGdlbmV4cHI+cqwAAAApB3LpAAAAclEBAABypgEAANoHX19tcm9fX3J7BAAAcsUAAAByDwAAACkEctAAAABypgAAAHLTAAAA2ghhdHRybmFtZXISAAAAcuQBAAByEwAAANoHX19nZXRfXzAaAABzFAAAAAABCAEIARYBDP8IAgYBCAEKARABehpfbGF6eWNsYXNzcHJvcGVydHkuX19nZXRfX04pBXIPAAAAchAAAAByEQAAAHLSAAAAcn8EAAByEgAAAHISAAAAchIAAAByEwAAAHJ6BAAAKhoAAHMEAAAACAEIBXJ6BAAAYwAAAAAAAAAAAAAAAAAAAAADAAAAQAAAAHNQAAAAZQBaAWQAWgJkAVoDZwBaBGUFZAJkA4QAgwFaBmUHZARkBYQAgwFaCGUHZAZkB4QAgwFaCWUHZAhkCYQAgwFaCmUHZApkC4QAgwFaC2QMUwApDXKRAAAAYdcBAAAKICAgIEEgc2V0IG9mIFVuaWNvZGUgY2hhcmFjdGVycywgZm9yIGxhbmd1YWdlLXNwZWNpZmljIHN0cmluZ3MgZm9yCiAgICBgYGFscGhhc2BgLCBgYG51bXNgYCwgYGBhbHBoYW51bXNgYCwgYW5kIGBgcHJpbnRhYmxlc2BgLgogICAgQSB1bmljb2RlX3NldCBpcyBkZWZpbmVkIGJ5IGEgbGlzdCBvZiByYW5nZXMgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyCiAgICBzZXQsIGluIGEgY2xhc3MgYXR0cmlidXRlIGBgX3Jhbmdlc2BgLCBzdWNoIGFzOjoKCiAgICAgICAgX3JhbmdlcyA9IFsoMHgwMDIwLCAweDAwN2UpLCAoMHgwMGEwLCAweDAwZmYpLF0KCiAgICBBIHVuaWNvZGUgc2V0IGNhbiBhbHNvIGJlIGRlZmluZWQgdXNpbmcgbXVsdGlwbGUgaW5oZXJpdGFuY2Ugb2Ygb3RoZXIgdW5pY29kZSBzZXRzOjoKCiAgICAgICAgY2xhc3MgQ0pLKENoaW5lc2UsIEphcGFuZXNlLCBLb3JlYW4pOgogICAgICAgICAgICBwYXNzCiAgICBjAQAAAAAAAAAAAAAABAAAAAgAAABDAAAAc1oAAABnAH0BfABqAEQAXTh9AnwCdAF1AHIaAQBxRHwCagJEAF0gfQN8AaADdAR8A2QBGQB8A2QCGQBkAxcAgwKhAQEAcSBxCmQEZAWEAHQFdAZ8AYMBgwFEAIMBUwApBk5yAQAAAHKXAAAAcqwAAABjAQAAAAAAAAAAAAAAAgAAAAQAAABTAAAAcxQAAABnAHwAXQx9AXQAfAGDAZECcQRTAHISAAAAcvYDAAByvgAAAHISAAAAchIAAAByEwAAAHIZAAAAVBoAAHIUAAAAejV1bmljb2RlX3NldC5fZ2V0X2NoYXJzX2Zvcl9yYW5nZXMuPGxvY2Fscz4uPGxpc3Rjb21wPikHcn0EAABykQAAANoHX3Jhbmdlc3JnAQAAcjwBAABypAEAAHL7AAAAKQRy0wAAAHKnAAAA2gJjY9oCcnJyEgAAAHISAAAAchMAAADaFV9nZXRfY2hhcnNfZm9yX3Jhbmdlc0waAABzDgAAAAACBAEKAQgBBAEKASABeiF1bmljb2RlX3NldC5fZ2V0X2NoYXJzX2Zvcl9yYW5nZXNjAQAAAAAAAAAAAAAAAQAAAAYAAABDAAAAcxYAAABkAaAAdAF0AmoDfACgBKEAgwKhAVMAKQJ6K2FsbCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoaXMgcmFuZ2VyuwAAACkFcuIAAAByBwAAAHKeAAAAckcDAABygwQAAHLkAQAAchIAAAByEgAAAHITAAAAcncAAABWGgAAcwIAAAAAA3oWdW5pY29kZV9zZXQucHJpbnRhYmxlc2MBAAAAAAAAAAAAAAABAAAABgAAAEMAAABzFgAAAGQBoAB0AXQCagN8AKAEoQCDAqEBUwApAnonYWxsIGFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiB0aGlzIHJhbmdlcrsAAAApBXLiAAAA2gZmaWx0ZXJyngAAANoHaXNhbHBoYXKDBAAAcuQBAAByEgAAAHISAAAAchMAAAByVQAAAFsaAABzAgAAAAADehJ1bmljb2RlX3NldC5hbHBoYXNjAQAAAAAAAAAAAAAAAQAAAAYAAABDAAAAcxYAAABkAaAAdAF0AmoDfACgBKEAgwKhAVMAKQJ6KmFsbCBudW1lcmljIGRpZ2l0IGNoYXJhY3RlcnMgaW4gdGhpcyByYW5nZXK7AAAAKQVy4gAAAHKEBAAAcp4AAADaB2lzZGlnaXRygwQAAHLkAQAAchIAAAByEgAAAHITAAAAcnMAAABgGgAAcwIAAAAAA3oQdW5pY29kZV9zZXQubnVtc2MBAAAAAAAAAAAAAAABAAAAAgAAAEMAAABzDAAAAHwAagB8AGoBFwBTACkBeilhbGwgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgaW4gdGhpcyByYW5nZSkCclUAAABycwAAAHLkAQAAchIAAAByEgAAAHITAAAAclQAAABlGgAAcwIAAAAAA3oVdW5pY29kZV9zZXQuYWxwaGFudW1zTikMcg8AAAByEAAAAHIRAAAAcusAAABygAQAAHLsAAAAcoMEAAByegQAAHJ3AAAAclUAAABycwAAAHJUAAAAchIAAAByEgAAAHISAAAAchMAAABykQAAADwaAABzGAAAAAgBBA0EAgIBCgkCAQoEAgEKBAIBCgQCAXKRAAAAYwAAAAAAAAAAAAAAAAAAAAAGAAAAQAAAAHPwAAAAZQBaAWQAWgJkAVoDZAJlBGoFZgJnAVoGRwBkA2QEhABkBGUHgwNaCEcAZAVkBoQAZAZlB4MDWglHAGQHZAiEAGQIZQeDA1oKRwBkCWQKhABkCmUHgwNaC0cAZAtkDIQAZAxlB4MDWgxHAGQNZA6EAGQOZQeDA1oNRwBkD2QQhABkEGUHgwNaDkcAZBFkEoQAZBJlB4MDWg9HAGQTZBSEAGQUZQ1lDmUPgwVaEEcAZBVkFoQAZBZlB4MDWhFHAGQXZBiEAGQYZQeDA1oSRwBkGWQahABkGmUHgwNaE0cAZBtkHIQAZBxlB4MDWhRkHVMAKR5ykAAAAHpGCiAgICBBIG5hbWVzcGFjZSBjbGFzcyBmb3IgZGVmaW5pbmcgY29tbW9uIGxhbmd1YWdlIHVuaWNvZGVfc2V0cy4KICAgIOkgAAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAJkA2cCWgRkBFMAKQV6GHB5cGFyc2luZ191bmljb2RlLkxhdGluMXovVW5pY29kZSBzZXQgZm9yIExhdGluLTEgVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2UpAnKHBAAA6X4AAAApAumgAAAA6f8AAABOqQVyDwAAAHIQAAAAchEAAABy6wAAAHKABAAAchIAAAByEgAAAHISAAAAchMAAADaBkxhdGluMXEaAABzBAAAAAgBBAFyjAQAAGMAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAABzFgAAAGUAWgFkAFoCZAFaA2QCZwFaBGQDUwApBHoYcHlwYXJzaW5nX3VuaWNvZGUuTGF0aW5Bei9Vbmljb2RlIHNldCBmb3IgTGF0aW4tQSBVbmljb2RlIENoYXJhY3RlciBSYW5nZSkC6QABAABpfwEAAE5yiwQAAHISAAAAchIAAAByEgAAAHITAAAA2gZMYXRpbkF1GgAAcwQAAAAIAQQBco4EAABjAAAAAAAAAAAAAAAAAAAAAAEAAABAAAAAcxYAAABlAFoBZABaAmQBWgNkAmcBWgRkA1MAKQR6GHB5cGFyc2luZ191bmljb2RlLkxhdGluQnovVW5pY29kZSBzZXQgZm9yIExhdGluLUIgVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2UpAmmAAQAAaU8CAABOcosEAAByEgAAAHISAAAAchIAAAByEwAAANoGTGF0aW5CeRoAAHMEAAAACAEEAXKPBAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZwBkAqIBWgRkA1MAKQR6F3B5cGFyc2luZ191bmljb2RlLkdyZWVrei5Vbmljb2RlIHNldCBmb3IgR3JlZWsgVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2VzKREpAmlwAwAAaf8DAAApAmkAHwAAaRUfAAApAmkYHwAAaR0fAAApAmkgHwAAaUUfAAApAmlIHwAAaU0fAAApAmlQHwAAaVcfAAApAWlZHwAAKQFpWx8AACkBaV0fAAApAmlfHwAAaX0fAAApAmmAHwAAabQfAAApAmm2HwAAacQfAAApAmnGHwAAadMfAAApAmnWHwAAadsfAAApAmndHwAAae8fAAApAmnyHwAAafQfAAApAmn2HwAAaf4fAABOcosEAAByEgAAAHISAAAAchIAAAByEwAAANoFR3JlZWt9GgAAcwQAAAAIAQQBcpAEAABjAAAAAAAAAAAAAAAAAAAAAAEAAABAAAAAcxYAAABlAFoBZABaAmQBWgNkAmcBWgRkA1MAKQR6GnB5cGFyc2luZ191bmljb2RlLkN5cmlsbGljejBVbmljb2RlIHNldCBmb3IgQ3lyaWxsaWMgVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2UpAmkABAAAaf8EAABOcosEAAByEgAAAHISAAAAchIAAAByEwAAANoIQ3lyaWxsaWOFGgAAcwQAAAAIAQQBcpEEAABjAAAAAAAAAAAAAAAAAAAAAAIAAABAAAAAcxgAAABlAFoBZABaAmQBWgNkAmQDZwJaBGQEUwApBXoZcHlwYXJzaW5nX3VuaWNvZGUuQ2hpbmVzZXovVW5pY29kZSBzZXQgZm9yIENoaW5lc2UgVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2UpAukATgAAaf+fAACpAmkAMAAAaT8wAABOcosEAAByEgAAAHISAAAAchIAAAByEwAAANoHQ2hpbmVzZYkaAABzBAAAAAgBBAFylAQAAGMAAAAAAAAAAAAAAAAAAAAABAAAAEAAAABzRAAAAGUAWgFkAFoCZAFaA2cAWgRHAGQCZAOEAGQDZQWDA1oGRwBkBGQFhABkBWUFgwNaB0cAZAZkB4QAZAdlBYMDWghkCFMAKQl6GnB5cGFyc2luZ191bmljb2RlLkphcGFuZXNlemBVbmljb2RlIHNldCBmb3IgSmFwYW5lc2UgVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2UsIGNvbWJpbmluZyBLYW5qaSwgSGlyYWdhbmEsIGFuZCBLYXRha2FuYSByYW5nZXNjAAAAAAAAAAAAAAAAAAAAAAIAAABAAAAAcxgAAABlAFoBZABaAmQBWgNkAmQDZwJaBGQEUwApBXogcHlwYXJzaW5nX3VuaWNvZGUuSmFwYW5lc2UuS2Fuaml6LVVuaWNvZGUgc2V0IGZvciBLYW5qaSBVbmljb2RlIENoYXJhY3RlciBSYW5nZSkCcpIEAABpv58AAHKTBAAATnKLBAAAchIAAAByEgAAAHISAAAAchMAAADaBUthbmppkRoAAHMEAAAACAEEAXKVBAAAYwAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAHMWAAAAZQBaAWQAWgJkAVoDZAJnAVoEZANTACkEeiNweXBhcnNpbmdfdW5pY29kZS5KYXBhbmVzZS5IaXJhZ2FuYXowVW5pY29kZSBzZXQgZm9yIEhpcmFnYW5hIFVuaWNvZGUgQ2hhcmFjdGVyIFJhbmdlKQJpQDAAAGmfMAAATnKLBAAAchIAAAByEgAAAHISAAAAchMAAADaCEhpcmFnYW5hlRoAAHMEAAAACAEEAXKWBAAAYwAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAHMWAAAAZQBaAWQAWgJkAVoDZAJnAVoEZANTACkEeiNweXBhcnNpbmdfdW5pY29kZS5KYXBhbmVzZS5LYXRha2FuYXoxVW5pY29kZSBzZXQgZm9yIEthdGFrYW5hICBVbmljb2RlIENoYXJhY3RlciBSYW5nZSkCaaAwAABp/zAAAE5yiwQAAHISAAAAchIAAAByEgAAAHITAAAA2ghLYXRha2FuYZkaAABzBAAAAAgBBAFylwQAAE4pCXIPAAAAchAAAAByEQAAAHLrAAAAcoAEAABykQAAAHKVBAAAcpYEAABylwQAAHISAAAAchIAAAByEgAAAHITAAAA2ghKYXBhbmVzZY0aAABzCgAAAAgBBAEEAhAEEARymAQAAGMAAAAAAAAAAAAAAAAAAAAAAgAAAEAAAABzGAAAAGUAWgFkAFoCZAFaA2cAZAKiAVoEZANTACkEehhweXBhcnNpbmdfdW5pY29kZS5Lb3JlYW56LlVuaWNvZGUgc2V0IGZvciBLb3JlYW4gVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2UpBikCaQCsAABpr9cAACkCaQARAABp/xEAACkCaTAxAABpjzEAACkCaWCpAABpf6kAACkCabDXAABp/9cAAHKTBAAATnKLBAAAchIAAAByEgAAAHISAAAAchMAAADaBktvcmVhbp0aAABzBAAAAAgBBAFymQQAAGMAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAABzEAAAAGUAWgFkAFoCZAFaA2QCUwApA3oVcHlwYXJzaW5nX3VuaWNvZGUuQ0pLelRVbmljb2RlIHNldCBmb3IgY29tYmluZWQgQ2hpbmVzZSwgSmFwYW5lc2UsIGFuZCBLb3JlYW4gKENKSykgVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2VOcg4BAAByEgAAAHISAAAAchIAAAByEwAAANoDQ0pLoRoAAHMEAAAACAEEAXKaBAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAJkA2cCWgRkBFMAKQV6FnB5cGFyc2luZ191bmljb2RlLlRoYWl6LFVuaWNvZGUgc2V0IGZvciBUaGFpIFVuaWNvZGUgQ2hhcmFjdGVyIFJhbmdlKQJpAQ4AAGk6DgAAKQJpPw4AAGlbDgAATnKLBAAAchIAAAByEgAAAHISAAAAchMAAADaBFRoYWmlGgAAcwQAAAAIAQQBcpsEAABjAAAAAAAAAAAAAAAAAAAAAAIAAABAAAAAcxgAAABlAFoBZABaAmQBWgNnAGQCogFaBGQDUwApBHoYcHlwYXJzaW5nX3VuaWNvZGUuQXJhYmljei5Vbmljb2RlIHNldCBmb3IgQXJhYmljIFVuaWNvZGUgQ2hhcmFjdGVyIFJhbmdlKQMpAmkABgAAaRsGAAApAmkeBgAAaf8GAAApAmkABwAAaX8HAABOcosEAAByEgAAAHISAAAAchIAAAByEwAAANoGQXJhYmljqRoAAHMEAAAACAEEAXKcBAAAYwAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAHMWAAAAZQBaAWQAWgJkAVoDZAJnAVoEZANTACkEehhweXBhcnNpbmdfdW5pY29kZS5IZWJyZXd6LlVuaWNvZGUgc2V0IGZvciBIZWJyZXcgVW5pY29kZSBDaGFyYWN0ZXIgUmFuZ2UpAmmQBQAAaf8FAABOcosEAAByEgAAAHISAAAAchIAAAByEwAAANoGSGVicmV3rRoAAHMEAAAACAEEAXKdBAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHMYAAAAZQBaAWQAWgJkAVoDZAJkA2cCWgRkBFMAKQV6HHB5cGFyc2luZ191bmljb2RlLkRldmFuYWdhcml6MlVuaWNvZGUgc2V0IGZvciBEZXZhbmFnYXJpIFVuaWNvZGUgQ2hhcmFjdGVyIFJhbmdlKQJpAAkAAGl/CQAAKQJp4KgAAGn/qAAATnKLBAAAchIAAAByEgAAAHISAAAAchMAAADaCkRldmFuYWdhcmmxGgAAcwQAAAAIAQQBcp4EAABOKRVyDwAAAHIQAAAAchEAAABy6wAAAHKiAAAA2gptYXh1bmljb2RlcoAEAABykQAAAHKMBAAAco4EAAByjwQAAHKQBAAAcpEEAABylAQAAHKYBAAAcpkEAABymgQAAHKbBAAAcpwEAABynQQAAHKeBAAAchIAAAByEgAAAHISAAAAchMAAABykAAAAGsaAABzHgAAAAgBBAMMAhAEEAQQBBAIEAQQBBAQEAQUBBAEEAQQBHKQAAAAdQ4AAADYp9mE2LnYsdio2YrYqXUGAAAA5Lit5paHdRIAAADQutC40YDQuNC70LvQuNGG0LB1EAAAAM6VzrvOu863zr3Ouc66zqx1DgAAANei1rTXkdeo1rTXmdeqdQkAAADml6XmnKzoqp51BgAAAOa8ouWtl3UMAAAA44Kr44K/44Kr44OKdQwAAADjgbLjgonjgYzjgap1CQAAAO2VnOq1reyWtHUJAAAA4LmE4LiX4LiidRgAAADgpKbgpYfgpLXgpKjgpL7gpJfgpLDgpYBjAAAAAAAAAAAAAAAAAAAAAAMAAABAAAAAcywAAABlAFoBZABaAmQBWgNHAGQCZAOEAGQDgwJaBEcAZARkBYQAZAWDAloFZAZTACkH2g5weXBhcnNpbmdfdGVzdHpCCiAgICBuYW1lc3BhY2UgY2xhc3MgZm9yIGNsYXNzZXMgdXNlZnVsIGluIHdyaXRpbmcgdW5pdCB0ZXN0cwogICAgYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHM4AAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBGQFhABaBWQGZAeEAFoGZAhkCYQAWgdkCmQLhABaCGQMUwApDXomcHlwYXJzaW5nX3Rlc3QucmVzZXRfcHlwYXJzaW5nX2NvbnRleHRheAMAAAogICAgICAgIENvbnRleHQgbWFuYWdlciB0byBiZSB1c2VkIHdoZW4gd3JpdGluZyB1bml0IHRlc3RzIHRoYXQgbW9kaWZ5IHB5cGFyc2luZyBjb25maWcgdmFsdWVzOgogICAgICAgICAtIHBhY2tyYXQgcGFyc2luZwogICAgICAgICAtIGRlZmF1bHQgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgogICAgICAgICAtIGRlZmF1bHQga2V5d29yZCBjaGFyYWN0ZXJzCiAgICAgICAgIC0gbGl0ZXJhbCBzdHJpbmcgYXV0by1jb252ZXJzaW9uIGNsYXNzCiAgICAgICAgIC0gX19kaWFnX18gc2V0dGluZ3MKCiAgICAgICAgRXhhbXBsZToKICAgICAgICAgICAgd2l0aCByZXNldF9weXBhcnNpbmdfY29udGV4dCgpOgogICAgICAgICAgICAgICAgIyB0ZXN0IHRoYXQgbGl0ZXJhbHMgdXNlZCB0byBjb25zdHJ1Y3QgYSBncmFtbWFyIGFyZSBhdXRvbWF0aWNhbGx5IHN1cHByZXNzZWQKICAgICAgICAgICAgICAgIFBhcnNlckVsZW1lbnQuaW5saW5lTGl0ZXJhbHNVc2luZyhTdXBwcmVzcykKCiAgICAgICAgICAgICAgICB0ZXJtID0gV29yZChhbHBoYXMpIHwgV29yZChudW1zKQogICAgICAgICAgICAgICAgZ3JvdXAgPSBHcm91cCgnKCcgKyB0ZXJtWy4uLl0gKyAnKScpCgogICAgICAgICAgICAgICAgIyBhc3NlcnQgdGhhdCB0aGUgJygpJyBjaGFyYWN0ZXJzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHBhcnNlZCB0b2tlbnMKICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VBbmRDaGVja0xpc3N0KGdyb3VwLCAiKGFi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ZAxkDYQBgwFaCmQCUwApEnomcHlwYXJzaW5nX3Rlc3QuVGVzdFBhcnNlUmVzdWx0c0Fzc2VydHN6awogICAgICAgIEEgbWl4aW4gY2xhc3MgdG8gYWRkIHBhcnNlIHJlc3VsdHMgYXNzZXJ0aW9uIG1ldGhvZHMgdG8gbm9ybWFsIHVuaXR0ZXN0LlRlc3RDYXNlIGNsYXNzZXMuCiAgICAgICAgTmMFAAAAAAAAAAAAAAAFAAAABQAAAEMAAABzPAAAAHwCZAF1AXIcfABqAHwCfAGgAaEAfARkAo0DAQB8A2QBdQFyOHwAagB8A3wBoAKhAHwEZAKNAwEAZAFTACkDesAKICAgICAgICAgICAgVW5pdCB0ZXN0IGFzc2VydGlvbiB0byBjb21wYXJlIGEgUGFyc2VSZXN1bHRzIG9iamVjdCB3aXRoIGFuIG9wdGlvbmFsIGV4cGVjdGVkX2xpc3QsCiAgICAgICAgICAgIGFuZCBjb21wYXJlIGFueSBkZWZpbmVkIHJlc3VsdHMgbmFtZXMgd2l0aCBhbiBvcHRpb25hbCBleHBlY3RlZF9kaWN0LgogICAgICAgICAgICBOqQFyxgAAACkD2gthc3NlcnRFcXVhbHIiAQAAcoQBAAApBXLQAAAAcsoCAADaDWV4cGVjdGVkX2xpc3TaDWV4cGVjdGVkX2RpY3RyxgAAAHISAAAAchIAAAByEwAAANoYYXNzZXJ0UGFyc2VSZXN1bHRzRXF1YWxzFRsAAHMIAAAAAAcIARQBCAF6P3B5cGFyc2luZ190ZXN0LlRlc3RQYXJzZVJlc3VsdHNBc3NlcnRzLmFzc2VydFBhcnNlUmVzdWx0c0VxdWFsc1RjBgAAAAAAAAAAAAAABwAAAAUAAABDAAAAczIAAAB8AWoAfAJkAWQCjQJ9BnwFch50AXwGoAKhAIMBAQB8AGoDfAZ8A3wEZAONAwEAZARTACkFer4KICAgICAgICAgICAgQ29udmVuaWVuY2Ugd3JhcHBlciBhc3NlcnQgdG8gdGVzdCBhIHBhcnNlciBlbGVtZW50IGFuZCBpbnB1dCBzdHJpbmcsIGFuZCBhc3NlcnQgdGhhdAogICAgICAgICAgICB0aGUgcmVzdWx0aW5nIFBhcnNlUmVzdWx0cy5hc0xpc3QoKSBpcyBlcXVhbCB0byB0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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 4
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
distro.cpython-39.pyc
37.50 KB
lrw-r--r--
2023-11-13 21:47:44
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-39.pyc
234.84 KB
lrw-r--r--
2023-11-13 21:47:44
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-39.pyc
26.90 KB
lrw-r--r--
2023-11-13 21:47:44
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-39.pyc
2.87 KB
lrw-r--r--
2023-11-13 21:47:44
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).