REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 61.67 KB
Close
//proc/thread-self/root/opt/alt/python37/lib64/python3.7/site-packages/numpy/testing/__pycache__/utils.cpython-37.pyc
Text
Base64
Qg0NCgAAAADC2EZkFScBAOMAAAAAAAAAAAAAAAAjAAAAQAAAAHOoAwAAZABaAGQBZAJsAW0CWgJtA1oDbQRaBAEAZAFkA2wFWgVkAWQDbAZaBmQBZANsB1oHZAFkA2wIWghkAWQDbAlaCWQBZARsCm0LWgttDFoMAQBkAWQDbA1aDWQBZANsDloOZAFkBWwPbRBaEG0RWhEBAGQBZAZsEm0TWhMBAGQBZAdsFG0VWhVtFloWbRdaF20YWhhtGVoZbRpaGm0bWhsBAGQBZAhsHG0dWh0BAGUGah5kARkAZAlrBXLIZAFkCmwfbSBaIAEAbgxkAWQKbCBtIFogAQBkC2QMZA1kDmQPZBBkEWQSZBNkFGQVZBZkF2QYZBlkGmQbZBxkHWQeZB9kIGQhZCJkI2QkZCVkJmQnZChkKWQqZCtkLGQtZyNaIUcAZC5kKIQAZChlIoMDWiNlI1okZAFaJWQvZQZqJmsGWidlKGUGZDBkA4MDZANrCVopZDFkMoQAWipkg2Q0ZB6EAVorZDVkNoQAWixkN2Q4hABaLWQ5ZDqEAFouZR1kO2Q8jQFkPWQZhACDAVovZQVqMGQ+awKQAXKuZIRkQGRBhAFaMWSFZENkFoQBWjJuMmUGajNkA2REhQIZAGRFawKQAXLYZEZlBaA0oQAWAGYBZEdkFoQBWjJuCGRIZBaEAFoyZQZqM2QDZESFAhkAZEVrApACcgxkRmUFoDShABYAZwBmAmRJZBWEAVo1bgxnAGYBZEpkFYQBWjVkhmRPZBOEAVo2ZIdkUGQLhAFaN2RRZBeEAFo4ZIhkU2QMhAFaOWSJZFRkDYQBWjpkimRWZFeEAVo7ZItkWGQOhAFaPGSMZFlkEYQBWj1kjWRaZA+EAVo+ZFtkG4QAWj9kXGQQhABaQGSOZF1kGoQBWkFkXmQYhABaQmRfZBKEAFpDZGBkIIQAWkRkj2RhZBSEAVpFZJBkY2QdhAFaRmRkZGWEAFpHZJFkZ2QkhAFaSGSSZGhkH4QBWklkk2RpZCGEAVpKZJRkamRrhAFaS2RsZG2EAFpMZG5kb4QAWk1HAGRwZHGEAGRxZU6DA1pPRwBkcmRzhABkc2VOgwNaUGUOalFklWR0ZHWEAYMBWlJkdmQihABaU2UOalFklmR3ZHiEAYMBWlRkeWQjhABaVWUVZHpke2YDZHxkfYQBWlZHAGR+ZCWEAGQlZSKDA1pXZQ5qUWR/ZCqEAIMBWlhlDmpRZIBkKYQAgwFaWUcAZIFkJoQAZCZlCWpagwNaW0cAZIJkLYQAZC1lToMDWlxkA1MAKZd6KgpVdGlsaXR5IGZ1bmN0aW9uIHRvIGZhY2lsaXRhdGUgdGVzdGluZy4KCukAAAAAKQPaCGRpdmlzaW9u2g9hYnNvbHV0ZV9pbXBvcnTaDnByaW50X2Z1bmN0aW9uTikC2gdwYXJ0aWFs2gV3cmFwcykC2gdta2R0ZW1w2gdta3N0ZW1wKQHaCFNraXBUZXN0KQfaB2Zsb2F0MzLaBWVtcHR52gZhcmFuZ2XaCmFycmF5X3JlcHLaB25kYXJyYXnaBWlzbmF02gVhcnJheSkB2glkZXByZWNhdGXpAwAAACkB2ghTdHJpbmdJT9oMYXNzZXJ0X2VxdWFs2hNhc3NlcnRfYWxtb3N0X2VxdWFs2hNhc3NlcnRfYXBwcm94X2VxdWFs2hJhc3NlcnRfYXJyYXlfZXF1YWzaEWFzc2VydF9hcnJheV9sZXNz2hNhc3NlcnRfc3RyaW5nX2VxdWFs2hlhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFs2g1hc3NlcnRfcmFpc2Vz2g1idWlsZF9lcnJfbXNn2hBkZWNvcmF0ZV9tZXRob2Rz2gdqaWZmaWVz2ghtZW11c2FnZdoScHJpbnRfYXNzZXJ0X2VxdWFs2gZyYWlzZXPaBHJhbmTaB3J1bmRvY3PaCXJ1bnN0cmluZ9oHdmVyYm9zZdoHbWVhc3VyZdoHYXNzZXJ0X9oeYXNzZXJ0X2FycmF5X2FsbW9zdF9lcXVhbF9udWxw2hNhc3NlcnRfcmFpc2VzX3JlZ2V42hRhc3NlcnRfYXJyYXlfbWF4X3VscNoMYXNzZXJ0X3dhcm5z2hJhc3NlcnRfbm9fd2FybmluZ3PaD2Fzc2VydF9hbGxjbG9zZdoPSWdub3JlRXhjZXB0aW9u2hhjbGVhcl9hbmRfY2F0Y2hfd2FybmluZ3NyCQAAANoVS25vd25GYWlsdXJlRXhjZXB0aW9u2gh0ZW1wcGF0aNoHdGVtcGRpctoHSVNfUFlQWdoMSEFTX1JFRkNPVU5U2hFzdXBwcmVzc193YXJuaW5nc2MAAAAAAAAAAAAAAAABAAAAQAAAAHMQAAAAZQBaAWQAWgJkAVoDZAJTACkDcjAAAAB6PFJhaXNlIHRoaXMgZXhjZXB0aW9uIHRvIG1hcmsgYSB0ZXN0IGFzIGEga25vd24gZmFpbGluZyB0ZXN0Lk4pBNoIX19uYW1lX1/aCl9fbW9kdWxlX1/aDF9fcXVhbG5hbWVfX9oHX19kb2NfX6kAcjoAAAByOgAAAPpGL29wdC9hbHQvcHl0aG9uMzcvbGliNjQvcHl0aG9uMy43L3NpdGUtcGFja2FnZXMvbnVtcHkvdGVzdGluZy91dGlscy5weXIwAAAAKQAAAHMEAAAACAEEAdoIX19weXB5X1/aC2dldHJlZmNvdW50YwAAAAAAAAAABAAAAAgAAABDAAAAc1QAAABkAX0AZAJ9AXkMZANkBGwAfQJXAG4YBAB0AWsKciwBAAEAAQBkBX0AWQBuEFgAfAJqAnwBawByPGQFfQB8AHNQZAZ8ARYAfQN0AXwDgwGCAXwCUwApB3ojIEltcG9ydCBub3NlIG9ubHkgd2hlbiBuZWVkZWQuCiAgICBUKQPpAQAAAHIBAAAAcgEAAAByAQAAAE5GekBOZWVkIG5vc2UgPj0gJWQuJWQuJWQgZm9yIHRlc3RzIC0gc2VlIGh0dHA6Ly9ub3NlLnJlYWR0aGVkb2NzLmlvKQPaBG5vc2XaC0ltcG9ydEVycm9yWg9fX3ZlcnNpb25pbmZvX18pBFoMbm9zZV9pc19nb29kWhRtaW5pbXVtX25vc2VfdmVyc2lvbnI/AAAA2gNtc2dyOgAAAHI6AAAAcjsAAADaC2ltcG9ydF9ub3NlNQAAAHMaAAAAAAMEAQQBAgEMAQ4BCgIKAQQCBAECAgYBCAJyQgAAANoAYwIAAAAAAAAABAAAAAgAAABDAAAAczgAAABkAX0CfABzNHkKfAGDAH0DVwBuGAQAdABrCnIqAQABAAEAfAF9A1kAbgJYAHQBfAODAYIBZAJTACkDYUkBAAAKICAgIEFzc2VydCB0aGF0IHdvcmtzIGluIHJlbGVhc2UgbW9kZS4KICAgIEFjY2VwdHMgY2FsbGFibGUgbXNnIHRvIGFsbG93IGRlZmVycmluZyBldmFsdWF0aW9uIHVudGlsIGZhaWx1cmUuCgogICAgVGhlIFB5dGhvbiBidWlsdC1pbiBgYGFzc2VydGBgIGRvZXMgbm90IHdvcmsgd2hlbiBleGVjdXRpbmcgY29kZSBpbgogICAgb3B0aW1pemVkIG1vZGUgKHRoZSBgYC1PYGAgZmxhZykgLSBubyBieXRlLWNvZGUgaXMgZ2VuZXJhdGVkIGZvciBpdC4KCiAgICBGb3IgZG9jdW1lbnRhdGlvbiBvbiB1c2FnZSwgcmVmZXIgdG8gdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uLgoKICAgIFROKQLaCVR5cGVFcnJvctoOQXNzZXJ0aW9uRXJyb3IpBNoDdmFsckEAAADaEV9fdHJhY2ViYWNraGlkZV9fWgRzbXNncjoAAAByOgAAAHI7AAAAcicAAABLAAAAcw4AAAAACwQBBAECAQoBDgEKAWMBAAAAAAAAAAMAAAAEAAAAQwAAAHMuAAAAZAFkAmwAbQF9AQEAfAF8AIMBfQJ0AnwCdAN0BIMBgwJyKnQFZAODAYIBfAJTACkEYYEBAABsaWtlIGlzbmFuLCBidXQgYWx3YXlzIHJhaXNlIGFuIGVycm9yIGlmIHR5cGUgbm90IHN1cHBvcnRlZCBpbnN0ZWFkIG9mCiAgICByZXR1cm5pbmcgYSBUeXBlRXJyb3Igb2JqZWN0LgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgaXNuYW4gYW5kIG90aGVyIHVmdW5jIHNvbWV0aW1lcyByZXR1cm4gYSBOb3RJbXBsZW1lbnRlZFR5cGUgb2JqZWN0IGluc3RlYWQKICAgIG9mIHJhaXNpbmcgYW55IGV4Y2VwdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBhIHdyYXBwZXIgdG8gbWFrZSBzdXJlIGFuCiAgICBleGNlcHRpb24gaXMgYWx3YXlzIHJhaXNlZC4KCiAgICBUaGlzIHNob3VsZCBiZSByZW1vdmVkIG9uY2UgdGhpcyBwcm9ibGVtIGlzIHNvbHZlZCBhdCB0aGUgVWZ1bmMgbGV2ZWwucgEAAAApAdoFaXNuYW56IWlzbmFuIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgdHlwZSkG2gpudW1weS5jb3JlckgAAADaCmlzaW5zdGFuY2XaBHR5cGXaDk5vdEltcGxlbWVudGVkckQAAAApA9oBeHJIAAAA2gJzdHI6AAAAcjoAAAByOwAAANoGZ2lzbmFuXwAAAHMKAAAAAAsMAQgBDgEI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AGQBfQR0AHwBdAGDAnKKdAB8AHQBgwJzKHQCdAN0BHwAgwGDAYMBggF0BXQGfACDAXQGfAGDAXwCfAODBAEAeEZ8AaAHoQBEAF06XAJ9BX0GfAV8AGsHcmR0AnQDfAWDAYMBggF0BXwAfAUZAHwBfAUZAGQCfAV8AmYCFgB8A4MEAQBxSFcAZANTAHQAfAF0CHQJZgKDAnL0dAB8AHQIdAlmAoMCcvR0BXQGfACDAXQGfAGDAXwCfAODBAEAeDJ0CnQGfAGDAYMBRABdIn0FdAV8AHwFGQB8AXwFGQBkBHwFfAJmAhYAfAODBAEAccpXAGQDUwBkBWQGbAttDH0HbQ19CG0OfQkBAGQFZAdsD20QfQptEX0LbRJ9DAEAdAB8AHwHgwKQAXM0dAB8AXwHgwKQAXJCdBN8AHwBfAJ8A4MEUwB0FHwAfAFnAnwCfANkCI0DfQ15FnwKfACDAZABcGZ8CnwBgwF9DlcAbhoEAHQVawqQAXKEAQABAAEAZAl9DlkAbgJYAHwOkAJyDHwKfACDAZABcqh8C3wAgwF9D3wMfACDAX0Qbgh8AH0PZAV9EHwKfAGDAZABcsx8C3wBgwF9EXwMfAGDAX0Sbgh8AX0RZAV9EnkYdAV8D3wRgwIBAHQFfBB8EoMCAQBXAG4eBAB0AmsKkAJyCgEAAQABAHQCfA2DAYIBWQBuAlgAfAh8AYMBfAh8AIMBawOQAnImdAJ8DYMBggF5jnQWfAGDAZACcjx0FnwAgwGQAnOEdBd8AYMBfRN0F3wAgwF9FHwTkAJzWHwUkAJybnwTkAJyZHwUkAJzgHQCfA2DAYIBbhJ8AXwAawKQAnOAdAJ8DYMBggFkA1MAfAFkBWsCkAJysnwAZAVrApACcrJ8CXwBgwF8CXwAgwFrApACc7J0AnwNgwGCAVcAbhwEAHQYdBV0GWYDawqQAnLQAQABAAEAWQBuAlgAeTx0GnwBgwF0GnwAgwFrApADcgR0G3wBgwFqHGoEdBt8AIMBahxqBGsCkANyBGQDUwB0AnwNgwGCAVcAbhwEAHQYdBV0GWYDawqQA3IqAQABAAEAWQBuAlgAfAF8AGsCkANzPnQCfA2DAYIBZANTACkKYWEDAAAKICAgIFJhaXNlcyBhbiBBc3NlcnRpb25FcnJvciBpZiB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsLgoKICAgIEdpdmVuIHR3byBvYmplY3RzIChzY2FsYXJzLCBsaXN0cywgdHVwbGVzLCBkaWN0aW9uYXJpZXMgb3IgbnVtcHkgYXJyYXlzKSwKICAgIGNoZWNrIHRoYXQgYWxsIGVsZW1lbnRzIG9mIHRoZXNlIG9iamVjdHMgYXJlIGVxdWFsLiBBbiBleGNlcHRpb24gaXMgcmFpc2VkCiAgICBhdCB0aGUgZmlyc3QgY29uZmxpY3RpbmcgdmFsdWVzLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGFjdHVhbCA6IGFycmF5X2xpa2UKICAgICAgICBUaGUgb2JqZWN0IHRvIGNoZWNrLgogICAgZGVzaXJlZCA6IGFycmF5X2xpa2UKICAgICAgICBUaGUgZXhwZWN0ZWQgb2JqZWN0LgogICAgZXJyX21zZyA6IHN0ciwgb3B0aW9uYWwKICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSB0byBiZSBwcmludGVkIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgIHZlcmJvc2UgOiBib29sLCBvcHRpb25hbAogICAgICAgIElmIFRydWUsIHRoZSBjb25mbGljdGluZyB2YWx1ZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlLgoKICAgIFJhaXNlcwogICAgLS0tLS0tCiAgICBBc3NlcnRpb25FcnJvcgogICAgICAgIElmIGFjdHVhbCBhbmQgZGVzaXJlZCBhcmUgbm90IGVxdWFsLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IG5wLnRlc3RpbmcuYXNzZXJ0X2VxdWFsKFs0LDVdLCBbNCw2XSkKICAgIC4uLgogICAgPHR5cGUgJ2V4Y2VwdGlvbnMuQXNzZXJ0aW9uRXJyb3InPjoKICAgIEl0ZW1zIGFyZSBub3QgZXF1YWw6CiAgICBpdGVtPTEKICAgICBBQ1RVQUw6IDUKICAgICBERVNJUkVEOiA2CgogICAgVHoJa2V5PSVyCiVzTnoKaXRlbT0lcgolc3IBAAAAKQNyDgAAANoIaXNzY2FsYXLaB3NpZ25iaXQpA9oMaXNjb21wbGV4b2Jq2gRyZWFs2gRpbWFnKQFyJQAAAEYpHXJKAAAA2gRkaWN0ckUAAAByiQAAAHJLAAAAchQAAAByXAAAANoFaXRlbXPaBGxpc3TaBXR1cGxlclsAAABySQAAAHIOAAAAcpMAAABylAAAANoJbnVtcHkubGlicpUAAABylgAAAHKXAAAAchcAAAByHAAAANoKVmFsdWVFcnJvcnJUAAAAck8AAAByRAAAAHJ7AAAAcg8AAAByEAAAANoFZHR5cGUpFdoGYWN0dWFs2gdkZXNpcmVkco4AAAByJQAAAHJHAAAA2gFrcmAAAAByDgAAAHKTAAAAcpQAAABylQAAAHKWAAAAcpcAAAByQQAAANoKdXNlY29tcGxleNoHYWN0dWFsctoHYWN0dWFsadoIZGVzaXJlZHLaCGRlc2lyZWRpWghpc2Rlc25hbloIaXNhY3RuYW5yOgAAAHI6AAAAcjsAAAByFAAAACIBAABzhAAAAAAjBAEKAQoBEAEWARIBCAEMASIBBAEcARYBEgEiAQQBFAEUARgBDgESBQIBFgEQAQoCBgEKAQgBCgIEAQQBCgEIAQoCBAEEAQIBCgEOARABDgMSAQgDAgQUAQgBCAEMAQwBCgIKAQgBBAEUARIBDAMWAQYCAgMSARoBBAIMBBYBBgMKAWMDAAAAAAAAAAYAAAAEAAAAQwAAAHNgAAAAZAF9A2QCZANsAH0EfAF8AmsCc1x0AYMAfQV8BaACfAChAQEAfAWgAmQEoQEBAHwEoAB8AXwFoQIBAHwFoAJkBaEBAQB8BKAAfAJ8BaECAQB0A3wFoAShAIMBggFkA1MAKQZhtQIAAAogICAgVGVzdCBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwsIGFuZCBwcmludCBhbiBlcnJvciBtZXNzYWdlIGlmIHRlc3QgZmFpbHMuCgogICAgVGhlIHRlc3QgaXMgcGVyZm9ybWVkIHdpdGggYGBhY3R1YWwgPT0gZGVzaXJlZGBgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHRlc3Rfc3RyaW5nIDogc3RyCiAgICAgICAgVGhlIG1lc3NhZ2Ugc3VwcGxpZWQgdG8gQXNzZXJ0aW9uRXJyb3IuCiAgICBhY3R1YWwgOiBvYmplY3QKICAgICAgICBUaGUgb2JqZWN0IHRvIHRlc3QgZm9yIGVxdWFsaXR5IGFnYWluc3QgYGRlc2lyZWRgLgogICAgZGVzaXJlZCA6IG9iamVjdAogICAgICAgIFRoZSBleHBlY3RlZCByZXN1bHQuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gbnAudGVzdGluZy5wcmludF9hc3NlcnRfZXF1YWwoJ1Rlc3QgWFlaIG9mIGZ1bmMgeHl6JywgWzAsIDFdLCBbMCwgMV0pCiAgICA+Pj4gbnAudGVzdGluZy5wcmludF9hc3NlcnRfZXF1YWwoJ1Rlc3QgWFlaIG9mIGZ1bmMgeHl6JywgWzAsIDFdLCBbMCwgMl0pCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAuLi4KICAgIEFzc2VydGlvbkVycm9yOiBUZXN0IFhZWiBvZiBmdW5jIHh5eiBmYWlsZWQKICAgIEFDVFVBTDoKICAgIFswLCAxXQogICAgREVTSVJFRDoKICAgIFswLCAyXQoKICAgIFRyAQAAAE56ESBmYWlsZWQKQUNUVUFMOiAKegpERVNJUkVEOiAKKQXaBnBwcmludHITAAAA2gV3cml0ZXJFAAAA2ghnZXR2YWx1ZSkGWgt0ZXN0X3N0cmluZ3KfAAAAcqAAAAByRwAAAHKnAAAAckEAAAByOgAAAHI6AAAAcjsAAAByIAAAAKMBAABzFAAAAAAcBAEIAggBBgEKAQoBDAEKAQwB6QcAAABjBQAAAAAAAAAQAAAACQAAAAMAAABzygEAAGQBfQVkAmQDbABtAX0GAQBkAmQEbAJtA30HbQR9CG0FfQkBAHkUfAeIAIMBcDR8B4gCgwF9ClcAbhgEAHQGawpyUAEAAQABAGQFfQpZAG4CWACHAIcBhwKHA4cEZgVkBmQHhAh9C3wKcu58B4gAgwFyhHwIiACDAX0MfAmIAIMBfQ1uCIgAfQxkAn0NfAeIAoMBcqZ8CIgCgwF9DnwJiAKDAX0PbgiIAn0OZAJ9D3kgdAd8DHwOiAFkCI0DAQB0B3wNfA+IAWQIjQMBAFcAbh4EAHQIawpy7AEAAQABAHQIfAuDAIMBggFZAG4CWAB0CYgAfAZ0CnQLZgODApABcxJ0CYgCfAZ0CnQLZgODApABciB0DIgAiAKIAYgDgwRTAHlkdA2IAoMBkAFyNnQNiACDAZABc4J0DogCgwGQAXNKdA6IAIMBkAFyanQOiAKDAZABcl50DogAgwGQAXN+dAh8C4MAgwGCAW4UiAKIAGsCkAFzfnQIfAuDAIMBggFkCVMAVwBuGgQAdA90EGYCawqQAXKeAQABAAEAWQBuAlgAdBGIAogAGACDAWQKZAuIAQsAEwAUAGsFkAFyxnQIfAuDAIMBggFkCVMAKQxhcAgAAAogICAgUmFpc2VzIGFuIEFzc2VydGlvbkVycm9yIGlmIHR3byBpdGVtcyBhcmUgbm90IGVxdWFsIHVwIHRvIGRlc2lyZWQKICAgIHByZWNpc2lvbi4KCiAgICAuLiBub3RlOjogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIG9uZSBvZiBgYXNzZXJ0X2FsbGNsb3NlYCwKICAgICAgICAgICAgICBgYXNzZXJ0X2FycmF5X2FsbW9zdF9lcXVhbF9udWxwYCBvciBgYXNzZXJ0X2FycmF5X21heF91bHBgCiAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGlzIGZ1bmN0aW9uIGZvciBtb3JlIGNvbnNpc3RlbnQgZmxvYXRpbmcgcG9pbnQKICAgICAgICAgICAgICBjb21wYXJpc29ucy4KCiAgICBUaGUgdGVzdCB2ZXJpZmllcyB0aGF0IHRoZSBlbGVtZW50cyBvZiBgYGFjdHVhbGBgIGFuZCBgYGRlc2lyZWRgYCBzYXRpc2Z5LgoKICAgICAgICBgYGFicyhkZXNpcmVkLWFjdHVhbCkgPCAxLjUgKiAxMCoqKC1kZWNpbWFsKWBgCgogICAgVGhhdCBpcyBhIGxvb3NlciB0ZXN0IHRoYW4gb3JpZ2luYWxseSBkb2N1bWVudGVkLCBidXQgYWdyZWVzIHdpdGggd2hhdCB0aGUKICAgIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBpbiBgYXNzZXJ0X2FycmF5X2FsbW9zdF9lcXVhbGAgZGlkIHVwIHRvIHJvdW5kaW5nCiAgICB2YWdhcmllcy4gQW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBhdCBjb25mbGljdGluZyB2YWx1ZXMuIEZvciBuZGFycmF5cyB0aGlzCiAgICBkZWxlZ2F0ZXMgdG8gYXNzZXJ0X2FycmF5X2FsbW9zdF9lcXVhbAoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGFjdHVhbCA6IGFycmF5X2xpa2UKICAgICAgICBUaGUgb2JqZWN0IHRvIGNoZWNrLgogICAgZGVzaXJlZCA6IGFycmF5X2xpa2UKICAgICAgICBUaGUgZXhwZWN0ZWQgb2JqZWN0LgogICAgZGVjaW1hbCA6IGludCwgb3B0aW9uYWwKICAgICAgICBEZXNpcmVkIHByZWNpc2lvbiwgZGVmYXVsdCBpcyA3LgogICAgZXJyX21zZyA6IHN0ciwgb3B0aW9uYWwKICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSB0byBiZSBwcmludGVkIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgIHZlcmJvc2UgOiBib29sLCBvcHRpb25hbAogICAgICAgIElmIFRydWUsIHRoZSBjb25mbGljdGluZyB2YWx1ZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlLgoKICAgIFJhaXNlcwogICAgLS0tLS0tCiAgICBBc3NlcnRpb25FcnJvcgogICAgICBJZiBhY3R1YWwgYW5kIGRlc2lyZWQgYXJlIG5vdCBlcXVhbCB1cCB0byBzcGVjaWZpZWQgcHJlY2lzaW9uLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgYXNzZXJ0X2FsbGNsb3NlOiBDb21wYXJlIHR3byBhcnJheV9saWtlIG9iamVjdHMgZm9yIGVxdWFsaXR5IHdpdGggZGVzaXJlZAogICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZSBhbmQvb3IgYWJzb2x1dGUgcHJlY2lzaW9uLgogICAgYXNzZXJ0X2FycmF5X2FsbW9zdF9lcXVhbF9udWxwLCBhc3NlcnRfYXJyYXlfbWF4X3VscCwgYXNzZXJ0X2VxdWFsCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gaW1wb3J0IG51bXB5LnRlc3RpbmcgYXMgbnB0CiAgICA+Pj4gbnB0LmFzc2VydF9hbG1vc3RfZXF1YWwoMi4zMzMzMzMzMzMzMzMzLCAyLjMzMzMzMzM0KQogICAgPj4+IG5wdC5hc3NlcnRfYWxtb3N0X2VxdWFsKDIuMzMz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b3IgbW9yZSBjb25zaXN0ZW50IGZsb2F0aW5nIHBvaW50CiAgICAgICAgICAgICAgY29tcGFyaXNvbnMuCgogICAgR2l2ZW4gdHdvIG51bWJlcnMsIGNoZWNrIHRoYXQgdGhleSBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KICAgIEFwcHJveGltYXRlbHkgZXF1YWwgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cwogICAgdGhhdCBhZ3JlZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhY3R1YWwgOiBzY2FsYXIKICAgICAgICBUaGUgb2JqZWN0IHRvIGNoZWNrLgogICAgZGVzaXJlZCA6IHNjYWxhcgogICAgICAgIFRoZSBleHBlY3RlZCBvYmplY3QuCiAgICBzaWduaWZpY2FudCA6IGludCwgb3B0aW9uYWwKICAgICAgICBEZXNpcmVkIHByZWNpc2lvbiwgZGVmYXVsdCBpcyA3LgogICAgZXJyX21zZyA6IHN0ciwgb3B0aW9uYWwKICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSB0byBiZSBwcmludGVkIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgIHZlcmJvc2UgOiBib29sLCBvcHRpb25hbAogICAgICAgIElmIFRydWUsIHRoZSBjb25mbGljdGluZyB2YWx1ZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlLgoKICAgIFJhaXNlcwogICAgLS0tLS0tCiAgICBBc3NlcnRpb25FcnJvcgogICAgICBJZiBhY3R1YWwgYW5kIGRlc2lyZWQgYXJlIG5vdCBlcXVhbCB1cCB0byBzcGVjaWZpZWQgcHJlY2lzaW9uLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgYXNzZXJ0X2FsbGNsb3NlOiBDb21wYXJlIHR3byBhcnJheV9saWtlIG9iamVjdHMgZm9yIGVxdWFsaXR5IHdpdGggZGVzaXJlZAogICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZSBhbmQvb3IgYWJzb2x1dGUgcHJlY2lzaW9uLgogICAgYXNzZXJ0X2FycmF5X2Fs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aXNlcyBhbiBBc3NlcnRpb25FcnJvciBpZiB0d28gYXJyYXlfbGlrZSBvYmplY3RzIGFyZSBub3QgZXF1YWwuCgogICAgR2l2ZW4gdHdvIGFycmF5X2xpa2Ugb2JqZWN0cywgY2hlY2sgdGhhdCB0aGUgc2hhcGUgaXMgZXF1YWwgYW5kIGFsbAogICAgZWxlbWVudHMgb2YgdGhlc2Ugb2JqZWN0cyBhcmUgZXF1YWwuIEFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYXQKICAgIHNoYXBlIG1pc21hdGNoIG9yIGNvbmZsaWN0aW5nIHZhbHVlcy4gSW4gY29udHJhc3QgdG8gdGhlIHN0YW5kYXJkIHVzYWdlCiAgICBpbiBudW1weSwgTmFOcyBhcmUgY29tcGFyZWQgbGlrZSBudW1iZXJzLCBubyBhc3NlcnRpb24gaXMgcmFpc2VkIGlmCiAgICBib3RoIG9iamVjdHMgaGF2ZSBOYU5zIGluIHRoZSBzYW1lIHBvc2l0aW9ucy4KCiAgICBUaGUgdXN1YWwgY2F1dGlvbiBmb3IgdmVyaWZ5aW5nIGVxdWFsaXR5IHdpdGggZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBpcwogICAgYWR2aXNlZC4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4IDogYXJyYXlfbGlrZQogICAgICAgIFRoZSBhY3R1YWwgb2JqZWN0IHRvIGNoZWNrLgogICAgeSA6IGFycmF5X2xpa2UKICAgICAgICBUaGUgZGVzaXJlZCwgZXhwZWN0ZWQgb2JqZWN0LgogICAgZXJyX21zZyA6IHN0ciwgb3B0aW9uYWwKICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSB0byBiZSBwcmludGVkIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgIHZlcmJvc2UgOiBib29sLCBvcHRpb25hbAogICAgICAgIElmIFRydWUsIHRoZSBjb25mbGljdGluZyB2YWx1ZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlLgoKICAgIFJhaXNlcwogICAgLS0tLS0tCiAgICBBc3NlcnRpb25FcnJvcgogICAgICAgIElmIGFjdHVhbCBhbmQgZGVzaXJlZCBvYmplY3RzIGFyZSBub3QgZXF1YWwuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBhc3NlcnRfYWxsY2xvc2U6IENvbXBhcmUgdHdvIGFycmF5X2xpa2Ugb2JqZWN0cyBmb3IgZXF1YWxpdHkgd2l0aCBkZXNpcmVkCiAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlIGFuZC9vciBhYnNvbHV0ZSBwcmVjaXNpb24uCiAgICBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsX251bHAsIGFzc2VydF9hcnJheV9tYXhfdWxwLCBhc3NlcnRfZXF1YWwKCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgIFRoZSBmaXJzdCBhc3NlcnQgZG9lcyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uOgoKICAgID4+PiBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9lcXVhbChbMS4wLDIuMzMzMzMsbnAubmFuXSwKICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbnAuZXhwKDApLDIuMzMzMzMsIG5wLm5hbl0pCgogICAgQXNzZXJ0IGZhaWxzIHdpdGggbnVtZXJpY2FsIGlucHJlY2lzaW9uIHdpdGggZmxvYXRzOgoKICAgID4+PiBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9lcXVhbChbMS4wLG5wLnBpLG5wLm5hbl0sCiAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEsIG5wLnNxcnQobnAucGkpKioyLCBucC5uYW5dKQogICAgLi4uCiAgICA8dHlwZSAnZXhjZXB0aW9ucy5WYWx1ZUVycm9yJz46CiAgICBBc3NlcnRpb25FcnJvcjoKICAgIEFycmF5cyBhcmUgbm90IGVxdWFsCiAgICA8QkxBTktMSU5FPgogICAgKG1pc21hdGNoIDUwLjAlKQogICAgIHg6IGFycmF5KFsgMS4gICAgICAgICwgIDMuMTQxNTkyNjUsICAgICAgICAgTmFOXSkKICAgICB5OiBhcnJheShbIDEuICAgICAgICAsICAzLjE0MTU5MjY1LCAgICAgICAgIE5hTl0pCgogICAgVXNlIGBhc3NlcnRfYWxsY2xvc2VgIG9yIG9uZSBvZiB0aGUgbnVscCAobnVtYmVyIG9mIGZsb2F0aW5nIHBvaW50IHZhbHVlcykKICAgIGZ1bmN0aW9ucyBmb3IgdGhlc2UgY2FzZXMgaW5zdGVhZDoKCiAgICA+Pj4gbnAudGVzdGluZy5hc3NlcnRfYWxsY2xvc2UoWzEuMCxucC5waSxucC5uYW5dLAogICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLCBucC5zcXJ0KG5wLnBpKSoqMiwgbnAubmFuXSwKICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydG9sPTFlLTEwLCBhdG9sPTApCgogICAgVHoUQXJyYXlzIGFyZSBub3QgZXF1YWwpA3KOAAAAciUAAAByjwAAAE4pA3LPAAAA2ghvcGVyYXRvctoGX19lcV9fKQVyTQAAAHLBAAAAco4AAAByJQAAAHJHAAAAcjoAAAByOgAAAHI7AAAAchcAAAAVAwAAcwYAAAAAPwQBDAFjBQAAAAAAAAAIAAAACQAAAAMAAABzbgAAAGQBfQVkAmQDbABtAX0GbQKJBW0DiQJtBIkGbQWJAAEAZAJkBGwGbQeJAwEAZAJkBWwIbQmJBAEAhwCHAYcChwOHBIcFhwZmB2QGZAeECH0HdAp8B3wAfAF8A3wEZAiIARYAiAFkCY0HAQBkClMAKQthxQkAAAogICAgUmFpc2VzIGFuIEFzc2VydGlvbkVycm9yIGlmIHR3byBvYmplY3RzIGFyZSBub3QgZXF1YWwgdXAgdG8gZGVzaXJlZAogICAgcHJlY2lzaW9uLgoKICAgIC4uIG5vdGU6OiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2Ugb25lIG9mIGBhc3NlcnRfYWxsY2xvc2VgLAogICAgICAgICAgICAgIGBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsX251bHBgIG9yIGBhc3NlcnRfYXJyYXlfbWF4X3VscGAKICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24gZm9yIG1vcmUgY29uc2lzdGVudCBmbG9hdGluZyBwb2ludAogICAgICAgICAgICAgIGNvbXBhcmlzb25zLgoKICAgIFRoZSB0ZXN0IHZlcmlmaWVzIGlkZW50aWNhbCBzaGFwZXMgYW5kIHRoYXQgdGhlIGVsZW1lbnRzIG9mIGBgYWN0dWFsYGAgYW5kCiAgICBgYGRlc2lyZWRgYCBzYXRpc2Z5LgoKICAgICAgICBgYGFicyhkZXNpcmVkLWFjdHVhbCkgPCAxLjUgKiAxMCoqKC1kZWNpbWFsKWBgCgogICAgVGhhdCBpcyBhIGxvb3NlciB0ZXN0IHRoYW4gb3JpZ2luYWxseSBkb2N1bWVudGVkLCBidXQgYWdyZWVzIHdpdGggd2hhdCB0aGUKICAgIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBkaWQgdXAgdG8gcm91bmRpbmcgdmFnYXJpZXMuIEFuIGV4Y2VwdGlvbiBpcyByYWlzZWQKICAgIGF0IHNoYXBlIG1pc21hdGNoIG9yIGNvbmZsaWN0aW5nIHZhbHVlcy4gSW4gY29udHJhc3QgdG8gdGhlIHN0YW5kYXJkIHVzYWdlCiAgICBpbiBudW1weSwgTmFOcyBhcmUgY29tcGFyZWQgbGlrZSBudW1iZXJzLCBubyBhc3NlcnRpb24gaXMgcmFpc2VkIGlmIGJvdGgKICAgIG9iamVjdHMgaGF2ZSBOYU5zIGluIHRoZSBzYW1lIHBvc2l0aW9ucy4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4IDogYXJyYXlfbGlrZQogICAgICAgIFRoZSBhY3R1YWwgb2JqZWN0IHRvIGNoZWNrLgogICAgeSA6IGFycmF5X2xpa2UKICAgICAgICBUaGUgZGVzaXJlZCwgZXhwZWN0ZWQgb2JqZWN0LgogICAgZGVjaW1hbCA6IGludCwgb3B0aW9uYWwKICAgICAgICBEZXNpcmVkIHByZWNpc2lvbiwgZGVmYXVsdCBpcyA2LgogICAgZXJyX21zZyA6IHN0ciwgb3B0aW9uYWwKICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgdG8gYmUgcHJpbnRlZCBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgICB2ZXJib3NlIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICBJZiBUcnVlLCB0aGUgY29uZmxpY3RpbmcgdmFsdWVzIGFyZSBhcHBlbmRlZCB0byB0aGUgZXJyb3IgbWVzc2FnZS4KCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgQXNzZXJ0aW9uRXJyb3IKICAgICAgICBJZiBhY3R1YWwgYW5kIGRlc2lyZWQgYXJlIG5vdCBlcXVhbCB1cCB0byBzcGVjaWZpZWQgcHJlY2lzaW9uLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgYXNzZXJ0X2FsbGNsb3NlOiBDb21wYXJlIHR3byBhcnJheV9saWtlIG9iamVjdHMgZm9yIGVxdWFsaXR5IHdpdGggZGVzaXJlZAogICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZSBhbmQvb3IgYWJzb2x1dGUgcHJlY2lzaW9uLgogICAgYXNzZXJ0X2FycmF5X2FsbW9zdF9lcXVhbF9udWxwLCBhc3NlcnRfYXJyYXlfbWF4X3VscCwgYXNzZXJ0X2VxdWFsCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICB0aGUgZmlyc3QgYXNzZXJ0IGRvZXMgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbgoKICAgID4+PiBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9hbG1vc3RfZXF1YWwoWzEuMCwyLjMzMyxucC5uYW5dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMS4wLDIuMzMzLG5wLm5hbl0pCgogICAgPj4+IG5wLnRlc3RpbmcuYXNzZXJ0X2FycmF5X2FsbW9zdF9lcXVhbChbMS4wLDIuMzMzMzMsbnAubmFuXSwKICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEuMCwyLjMzMzM5LG5wLm5hbl0sIGRlY2ltYWw9NSkKICAgIC4uLgogICAgPHR5cGUgJ2V4Y2VwdGlvbnMuQXNzZXJ0aW9uRXJyb3InPjoKICAgIEFzc2VydGlvbkVycm9yOgogICAgQXJyYXlzIGFyZSBub3QgYWxtb3N0IGVxdWFsCiAgICA8QkxBTktMSU5FPgogICAgKG1pc21hdGNoIDUwLjAlKQogICAgIHg6IGFycmF5KFsgMS4gICAgICwgIDIuMzMzMzMsICAgICAgTmFOXSkKICAgICB5OiBhcnJh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amVjdHMgaGF2ZSBOYU5zIGluIHRoZSBzYW1lCiAgICBwb3NpdGlvbnMuCgoKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4IDogYXJyYXlfbGlrZQogICAgICBUaGUgc21hbGxlciBvYmplY3QgdG8gY2hlY2suCiAgICB5IDogYXJyYXlfbGlrZQogICAgICBUaGUgbGFyZ2VyIG9iamVjdCB0byBjb21wYXJlLgogICAgZXJyX21zZyA6IHN0cmluZwogICAgICBUaGUgZXJyb3IgbWVzc2FnZSB0byBiZSBwcmludGVkIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgIHZlcmJvc2UgOiBib29sCiAgICAgICAgSWYgVHJ1ZSwgdGhlIGNvbmZsaWN0aW5nIHZhbHVlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIGVycm9yIG1lc3NhZ2UuCgogICAgUmFpc2VzCiAgICAtLS0tLS0KICAgIEFzc2VydGlvbkVycm9yCiAgICAgIElmIGFjdHVhbCBhbmQgZGVzaXJlZCBvYmplY3RzIGFyZSBub3QgZXF1YWwuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBhc3NlcnRfYXJyYXlfZXF1YWw6IHRlc3RzIG9iamVjdHMgZm9yIGVxdWFsaXR5CiAgICBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsOiB0ZXN0IG9iamVjdHMgZm9yIGVxdWFsaXR5IHVwIHRvIHByZWNpc2lvbgoKCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gbnAudGVzdGluZy5hc3NlcnRfYXJyYXlfbGVzcyhbMS4wLCAxLjAsIG5wLm5hbl0sIFsxLjEsIDIuMCwgbnAubmFuXSkKICAgID4+PiBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9sZXNzKFsxLjAsIDEuMCwgbnAubmFuXSwgWzEsIDIuMCwgbnAubmFuXSkKICAgIC4uLgogICAgPHR5cGUgJ2V4Y2VwdGlvbnMuVmFsdWVFcnJvcic+OgogICAgQXJyYXlzIGFyZSBub3QgbGVzcy1vcmRlcmVkCiAgICAobWlzbWF0Y2ggNTAuMCUpCiAgICAgeDogYXJyYXkoWyAgMS4s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AAADAAAATwAAAHM6AAAAZAF9BHQAgwB9BXQBagJqA2QCawVyIHwFagRqBX0Gbgh8BWoEagZ9BnwGfAB8AWYCfAKeAnwDjgFTACkDYVkCAAAKICAgIGFzc2VydF9yYWlzZXNfcmVnZXgoZXhjZXB0aW9uX2NsYXNzLCBleHBlY3RlZF9yZWdleHAsIGNhbGxhYmxlLCAqYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCiAgICBhc3NlcnRfcmFpc2VzX3JlZ2V4KGV4Y2VwdGlvbl9jbGFzcywgZXhwZWN0ZWRfcmVnZXhwKQoKICAgIEZhaWwgdW5sZXNzIGFuIGV4Y2VwdGlvbiBvZiBjbGFzcyBleGNlcHRpb25fY2xhc3MgYW5kIHdpdGggbWVzc2FnZSB0aGF0CiAgICBtYXRjaGVzIGV4cGVjdGVkX3JlZ2V4cCBpcyB0aHJvd24gYnkgY2FsbGFibGUgd2hlbiBpbnZva2VkIHdpdGggYXJndW1lbnRzCiAgICBhcmdzIGFuZCBrZXl3b3JkIGFyZ3VtZW50cyBrd2FyZ3MuCgogICAgQWx0ZXJuYXRpdmVseSwgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgbGlrZSBgYXNzZXJ0X3JhaXNlc2AuCgogICAgTmFtZSBvZiB0aGlzIGZ1bmN0aW9uIGFkaGVyZXMgdG8gUHl0aG9uIDMuMisgcmVmZXJlbmNlLCBidXQgc2hvdWxkIHdvcmsgaW4KICAgIGFsbCB2ZXJzaW9ucyBkb3duIHRvIDIuNi4KCiAgICBOb3RlcwogICAgLS0tLS0KICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuOS4wCgogICAgVHISAAAAKQdyQgAAAHLzAAAA2gx2ZXJzaW9uX2luZm/aBW1ham9ycv8AAAByKQAAAFoUYXNzZXJ0X3JhaXNlc19yZWdleHApB1oPZXhjZXB0aW9uX2NsYXNzWg9leHBlY3RlZF9yZWdleHByXQAAAHIAAQAAckcAAAByPwAAANoIZnVuY25hbWVyOgAAAHI6AAAAcjsAAAByKQAAAKkEAABzDAAAAAAUBAEGAgwBCgMIAmMDAAAAAAAAAAcAAAAJAAAAAwAAAHO2AAAAfAJkAWsIchp0AKABZAJ0AmoDFgChAX0Cbgp0AKABfAKhAX0CfABqBH0DZANkBGwFbQaJAAEAhwBmAWQFZAaECHwDoAehAEQAgwF9BHhkfAREAF1cfQV5HHQIfAVkB4MCcmp8BWoJfQZuBnwFagp9BlcAbhYEAHQLawpyiAEAAQABAHdSWQBuAlgAfAKgDHwGoQFyUnwGoA1kCKEBc1J0DnwAfAZ8AXwFgwGDAwEAcVJXAGQBUwApCWEMAwAACiAgICBBcHBseSBhIGRlY29yYXRvciB0byBhbGwgbWV0aG9kcyBpbiBhIGNsYXNzIG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uLgoKICAgIFRoZSBnaXZlbiBkZWNvcmF0b3IgaXMgYXBwbGllZCB0byBhbGwgcHVibGljIG1ldGhvZHMgb2YgYGNsc2AgdGhhdCBhcmUKICAgIG1hdGNoZWQgYnkgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBgdGVzdG1hdGNoYAogICAgKGBgdGVzdG1hdGNoLnNlYXJjaChtZXRob2RuYW1lKWBgKS4gTWV0aG9kcyB0aGF0IGFyZSBwcml2YXRlLCBpLmUuIHN0YXJ0CiAgICB3aXRoIGFuIHVuZGVyc2NvcmUsIGFyZSBpZ25vcmVkLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGNscyA6IGNsYXNzCiAgICAgICAgQ2xhc3Mgd2hvc2UgbWV0aG9kcyB0byBkZWNvcmF0ZS4KICAgIGRlY29yYXRvciA6IGZ1bmN0aW9uCiAgICAgICAgRGVjb3JhdG9yIHRvIGFwcGx5IHRvIG1ldGhvZHMKICAgIHRlc3RtYXRjaCA6IGNvbXBpbGVkIHJlZ2V4cCBvciBzdHIsIG9wdGlvbmFsCiAgICAgICAgVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4gRGVmYXVsdCB2YWx1ZSBpcyBOb25lLCBpbiB3aGljaCBjYXNlIHRoZQogICAgICAgIG5vc2UgZGVmYXVsdCAoYGByZS5jb21waWxlKHInKD86XnxbXGJfXC4lcy1dKVtUdF1lc3QnICUgb3Muc2VwKWBgKQogICAgICAgIGlzIHVzZWQuCiAgICAgICAgSWYgYHRlc3RtYXRjaGAgaXMgYSBzdHJpbmcsIGl0IGlz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YWN0dWFsYCBhbmQgYGRlc2lyZWRgIHRvCiAgICBgYGF0b2wgKyBydG9sICogYWJzKGRlc2lyZWQpYGAuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS41LjAKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBhY3R1YWwgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2J0YWluZWQuCiAgICBkZXNpcmVkIDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IGRlc2lyZWQuCiAgICBydG9sIDogZmxvYXQsIG9wdGlvbmFsCiAgICAgICAgUmVsYXRpdmUgdG9sZXJhbmNlLgogICAgYXRvbCA6IGZsb2F0LCBvcHRpb25hbAogICAgICAgIEFic29sdXRlIHRvbGVyYW5jZS4KICAgIGVxdWFsX25hbiA6IGJvb2wsIG9wdGlvbmFsLgogICAgICAgIElmIFRydWUsIE5hTnMgd2lsbCBjb21wYXJlIGVxdWFsLgogICAgZXJyX21zZyA6IHN0ciwgb3B0aW9uYWwKICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSB0byBiZSBwcmludGVkIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgIHZlcmJvc2UgOiBib29sLCBvcHRpb25hbAogICAgICAgIElmIFRydWUsIHRoZSBjb25mbGljdGluZyB2YWx1ZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlLgoKICAgIFJhaXNlcwogICAgLS0tLS0tCiAgICBBc3NlcnRpb25FcnJvcgogICAgICAgIElmIGFjdHVhbCBhbmQgZGVzaXJlZCBhcmUgbm90IGVxdWFsIHVwIHRvIHNwZWNpZmllZCBwcmVjaXNpb24uCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBhc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsX251bHAsIGFzc2VydF9hcnJheV9tYXhfdWxwCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4geCA9IFsxZS01LCAxZS0zLCAxZS0xXQogICAgPj4+IHkgPSBucC5hcmNjb3MobnAuY29zKHgpKQogICAgPj4+IGFzc2VydF9hbGxjbG9zZSh4LCB5LCBydG9sPTFlLTUsIGF0b2w9MCkKCiAgICBUcgEAAABOYwIAAAAAAAAAAgAAAAcAAAATAAAAcxgAAACIAmoAagFqAnwAfAGIA4gAiAFkAY0FUwApAk4pA9oEcnRvbNoEYXRvbHLLAAAAKQPaBGNvcmXaB251bWVyaWPaB2lzY2xvc2UpAnJNAAAAcsEAAAApBHIoAQAAcssAAABytgAAAHInAQAAcjoAAAByOwAAAHLaAAAAbAUAAHMEAAAAAAEQAXogYXNzZXJ0X2FsbGNsb3NlLjxsb2NhbHM+LmNvbXBhcmV6J05vdCBlcXVhbCB0byB0b2xlcmFuY2UgcnRvbD0lZywgYXRvbD0lZykEco4AAAByJQAAAHKPAAAAcssAAAApBHKvAAAAWgphc2FueWFycmF5cs8AAABy4AAAACkKcp8AAAByoAAAAHInAQAAcigBAAByywAAAHKOAAAAciUAAAByRwAAAHLaAAAAco8AAAByOgAAACkEcigBAAByywAAAHK2AAAAcicBAAByOwAAAHItAAAAPAUAAHMOAAAAAC0EAQgCEgQWAQwBDgFjAwAAAAAAAAAKAAAACAAAAEMAAABzmgAAAGQBfQNkAmQDbAB9BHwEoAF8AKEBfQV8BKABfAGhAX0GfAJ8BKACfASgA3wFfAZrBHwFfAahA6EBFAB9B3wEoAR8BKABfAB8ARgAoQF8B2sBoQFzlnwEoAV8AKEBc2h8BKAFfAGhAXJyZAR8AhYAfQhuHHwEoAZ0B3wAfAGDAqEBfQlkBXwCfAlmAhYAfQh0CHwIgwGCAWQDUwApBmHbBAAACiAgICBDb21wYXJlIHR3byBhcnJheXMgcmVsYXRpdmVseSB0byB0aGVpciBzcGFjaW5nLgoKICAgIFRoaXMgaXMgYSByZWxhdGl2ZWx5IHJvYnVzdCBtZXRob2QgdG8gY29tcGFyZSB0d28gYXJyYXlzIHdob3NlIGFtcGxpdHVkZQogICAgaXMgdmFyaWFibGUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSA6IGFycmF5X2xpa2UKICAgICAgICBJbnB1dCBhcnJheXMuCiAgICBudWxwIDogaW50LCBvcHRpb25hbAogICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiB1bml0IGluIHRoZSBsYXN0IHBsYWNlIGZvciB0b2xlcmFuY2UgKHNlZSBOb3RlcykuCiAgICAgICAgRGVmYXVsdCBpcyAxLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIE5vbmUKCiAgICBSYWlzZXMKICAgIC0tLS0tLQogICAgQXNzZXJ0aW9uRXJyb3IKICAgICAgICBJZiB0aGUgc3BhY2luZyBiZXR3ZWVuIGB4YCBhbmQgYHlgIGZvciBvbmUgb3IgbW9yZSBlbGVtZW50cyBpcyBsYXJnZXIKICAgICAgICB0aGFuIGBudWxwYC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGFzc2VydF9hcnJheV9tYXhfdWxwIDogQ2hlY2sgdGhhdCBhbGwgaXRlbXMgb2YgYXJyYXlzIGRpZmZlciBpbiBhdCBtb3N0CiAgICAgICAgTiBVbml0cyBpbiB0aGUgTGFzdCBQbGFjZS4KICAgIHNwYWNpbmcgOiBSZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4geCBhbmQgdGhlIG5lYXJlc3QgYWRqYWNlbnQgbnVtYmVyLgoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgQW4gYXNzZXJ0aW9uIGlzIHJhaXNlZCBpZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0OjoKCiAgICAgICAgYWJzKHggLSB5KSA8PSBudWxwcyAqIHNwYWNpbmcobWF4aW11bShhYnMoeCksIGFicyh5KSkpCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4geCA9IG5wLmFycmF5KFsxLiwgMWUtMTAsIDFlLTIwXSkKICAgID4+PiBlcHMgPSBucC5maW5mbyh4LmR0eXBlKS5lcHMKICAgID4+PiBucC50ZXN0aW5nLmFzc2VydF9hcnJheV9hbG1vc3RfZXF1YWxfbnVscCh4LCB4KmVwcy8yICsgeCkKCiAgICA+Pj4gbnAudGVzdGluZy5hc3NlcnRfYXJyYXlfYWxtb3N0X2VxdWFsX251bHAoeCwgeCplcHMgKyB4KQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAu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dGluZyB0aGUgY29udGV4dC4KCiAgICBUaGUgJ3JlY29yZCcgYXJndW1lbnQgc3BlY2lmaWVzIHdoZXRoZXIgd2FybmluZ3Mgc2hvdWxkIGJlIGNhcHR1cmVkIGJ5IGEKICAgIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiBgYHdhcm5pbmdzLnNob3d3YXJuaW5nKClgYCBhbmQgYmUgYXBwZW5kZWQgdG8gYQogICAgbGlzdCByZXR1cm5lZCBieSB0aGUgY29udGV4dCBtYW5hZ2VyLiBPdGhlcndpc2UgTm9uZSBpcyByZXR1cm5lZCBieSB0aGUKICAgIGNvbnRleHQgbWFuYWdlci4gVGhlIG9iamVjdHMgYXBwZW5kZWQgdG8gdGhlIGxpc3QgYXJlIGFyZ3VtZW50cyB3aG9zZQogICAgYXR0cmlidXRlcyBtaXJyb3IgdGhlIGFyZ3VtZW50cyB0byBgYHNob3d3YXJuaW5nKClgYC4KCiAgICBUaGUgJ21vZHVsZScgYXJndW1lbnQgaXMgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBtb2R1bGUgdG8gdGhlIG1vZHVsZQogICAgbmFtZWQgJ3dhcm5pbmdzJyBhbmQgaW1wb3J0ZWQgdW5kZXIgdGhhdCBuYW1lLiBUaGlzIGFyZ3VtZW50IGlzIG9ubHkgdXNlZnVsCiAgICB3aGVuIHRlc3RpbmcgdGhlIHdhcm5pbmdzIG1vZHVsZSBpdHNlbGYuCgogICAgRGVwcmVjYXRlZCBpbiAxLjguMAoKICAgIE5vdGVzCiAgICAtLS0tLQogICAgYFdhcm5pbmdNYW5hZ2VyYCBpcyBhIGNvcHkgb2YgdGhlIGBgY2F0Y2hfd2FybmluZ3NgYCBjb250ZXh0IG1hbmFnZXIKICAgIGZyb20gdGhlIFB5dGhvbiAyLjYgd2FybmluZ3MgbW9kdWxlLCB3aXRoIHNsaWdodCBtb2RpZmljYXRpb25zLgogICAgSXQgaXMgY29waWVkIHNvIGl0IGNhbiBiZSB1c2VkIGluIE51bVB5IHdpdGggb2xkZXIgUHl0aG9uIHZlcnNpb25zLgoKICAgIEZOYwMAAAAAAAAAAwAAAAIAAABDAAAAcywAAAB8AXwAXwB8AmQAawhyHHQBagJkARkAfABf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AWQJhQIZAH0GfAZ8BYMAfAOIAYgBiAKIAGQKZgUWAGYDVgABAHwFgwB9B3wHfAd8A4gBiAGIAogAZAtmBRYAZgNWAAEAfAZkDGQJhQIZAHwFgwBkCWQNhQIZAHwDiAFkDBcAiAGIAmQMGACIAGQKZgUWAGYDVgABAHwGZAlkDYUCGQB8BYMAZAxkCYUCGQB8A4gBiAFkDBcAiAJkDBgAiABkCmYFFgBmA1YAAQB8BYMAZAlkDYUCGQB8BYMAZAxkCYUCGQB8A4gBiAFkDBcAiAJkDBgAiABkDmYFFgBmA1YAAQB8BYMAZAxkCYUCGQB8BYMAZAlkDYUCGQB8A4gBZAwXAIgBiAJkDBgAiABkDmYFFgBmA1YAAQB8AWQPawJyNocAhwGHAmYDZBBkB4QIfQiHAIcBhwJmA2QRZAeECH0JdAKIAmYBiABkCI0CiAFkCYUCGQB9BnwGfAiDAHwJgwB8BIgBiAGIAYgCiABkCmYGFgBmBFYAAQB8CIMAfQd8B3wHfAmDAHwEiAGIAYgBiAKIAGQSZgYWAGYEVgABAHwJgwB9B3wHfAiDAHwHfASIAYgBiAGIAogAZBNmBhYAZgRWAAEAfAZkDGQJhQIZAHwIgwBkCWQNhQIZAHwJgwBkCWQNhQIZAHwEiAFkDBcAiAGIAYgCZAwYAIgAZApmBhYAZgRWAAEAfAZkCWQNhQIZAHwIgwBkDGQJhQIZAHwJgwBkCWQNhQIZAHwEiAGIAWQMFwCIAYgCZAwYAIgAZApmBhYAZgRWAAEAfAZkCWQNhQIZAHwIgwBkCWQNhQIZAHwJgwBkDGQJhQIZAHwEiAGIAYgBZAwXAIgCZAwYAIgAZApmBhYAZgRWAAEAfAiDAGQMZAmFAhkAfAiDAGQJZA2FAhkAfAmDAGQJZA2FAhkAfASIAWQMFwCIAYgBiAJkDBgAiABkDmYGFgBmBFYAAQB8CIMAZAlkDYUCGQB8CIMAZAxkCYUCGQB8CYMAZAlkDYUCGQB8BIgBiAFkDBcAiAGIAmQMGACIAGQOZgYWAGYEVgABAHwIgwBkCWQNhQIZAHwIgwBkCWQNhQIZAHwJgwBkDGQJhQIZAHwEiAGIAYgBZAwXAIgCZAwYAIgAZA5mBhYAZgRWAAEAcTZXAHEUVwBkCVMAKRRh0wIAAAogICAgZ2VuZXJhdG9yIHByb2R1Y2luZyBk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ciB0aGF0IHJlc2V0cyB3YXJuaW5nIHJlZ2lzdHJ5IGZvciBjYXRjaGluZyB3YXJuaW5ncwoKICAgIFdhcm5pbmdzIGNhbiBiZSBzbGlwcGVyeSwgYmVjYXVzZSwgd2hlbmV2ZXIgYSB3YXJuaW5nIGlzIHRyaWdnZXJlZCwgUHl0aG9uCiAgICBhZGRzIGEgYGBfX3dhcm5pbmdyZWdpc3RyeV9fYGAgbWVtYmVyIHRvIHRoZSAqY2FsbGluZyogbW9kdWxlLiAgVGhpcyBtYWtlcwogICAgaXQgaW1wb3NzaWJsZSB0byByZXRyaWdnZXIgdGhlIHdhcm5pbmcgaW4gdGhpcyBtb2R1bGUsIHdoYXRldmVyIHlvdSBwdXQgaW4KICAgIHRoZSB3YXJuaW5ncyBmaWx0ZXJzLiAgVGhpcyBjb250ZXh0IG1hbmFnZXIgYWNjZXB0cyBhIHNlcXVlbmNlIG9mIGBtb2R1bGVzYAogICAgYXMgYSBrZXl3b3JkIGFyZ3VtZW50IHRvIGl0cyBjb25zdHJ1Y3RvciBhbmQ6CgogICAgKiBzdG9yZXMgYW5kIHJlbW92ZXMgYW55IGBgX193YXJuaW5ncmVnaXN0cnlfX2BgIGVudHJpZXMgaW4gZ2l2ZW4gYG1vZHVsZXNgCiAgICAgIG9uIGVudHJ5OwogICAgKiByZXNldHMgYGBfX3dhcm5pbmdyZWdpc3RyeV9fYGAgdG8gaXRzIHByZXZpb3VzIHN0YXRlIG9uIGV4aXQuCgogICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB0cmlnZ2VyIGFueSB3YXJuaW5nIGFmcmVzaCBpbnNpZGUgdGhlIGNvbnRleHQKICAgIG1hbmFnZXIgd2l0aG91dCBkaXN0dXJiaW5nIHRoZSBzdGF0ZSBvZiB3YXJuaW5ncyBvdXRzaWRlLgoKICAgIEZvciBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMCwgcGxlYXNlIGNvbnNpZGVyIGFsbCBhcmd1bWVudHMgdG8gYmUKICAgIGtleXdvcmQtb25seS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICByZWNvcmQgOiBib29sLCBvcHRpb25hbAogICAgICAgIFNwZWNpZmllcyB3aGV0aGVyIHdhcm5pbmdzIHNob3VsZCBiZSBjYXB0dXJlZCBieSBhIGN1c3RvbQogICAgICAgIGltcGxlbWVudGF0aW9uIG9mIGBgd2FybmluZ3Muc2hvd3dhcm5pbmcoKWBgIGFuZCBiZSBhcHBlbmRlZCB0byBhIGxpc3QKICAgICAgICByZXR1cm5lZCBieSB0aGUgY29udGV4dCBtYW5hZ2VyLiBPdGhlcndpc2UgTm9uZSBpcyByZXR1cm5lZCBieSB0aGUKICAgICAgICBjb250ZXh0IG1hbmFnZXIuIFRoZSBvYmplY3RzIGFwcGVuZGVkIHRvIHRoZSBsaXN0IGFyZSBhcmd1bWVudHMgd2hvc2UKICAgICAgICBhdHRyaWJ1dGVzIG1pcnJvciB0aGUgYXJndW1lbnRzIHRvIGBgc2hvd3dhcm5pbmcoKWBgLgogICAgbW9kdWxlcyA6IHNlcXVlbmNlLCBvcHRpb25hbAogICAgICAgIFNlcXVlbmNlIG9mIG1vZHVsZXMgZm9yIHdoaWNoIHRvIHJlc2V0IHdhcm5pbmdzIHJlZ2lzdHJ5IG9uIGVudHJ5IGFuZAogICAgICAgIHJlc3RvcmUgb24gZXhpdC4gVG8gd29yayBjb3JyZWN0bHksIGFsbCAnaWdub3JlJyBmaWx0ZXJzIHNob3VsZAogICAgICAgIGZpbHRlciBieSBvbmUgb2YgdGhlc2UgbW9kdWxlcy4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBpbXBvcnQgd2FybmluZ3MKICAgID4+PiB3aXRoIGNsZWFyX2FuZF9jYXRjaF93YXJuaW5ncyhtb2R1bGVzPVtucC5jb3JlLmZyb21udW1lcmljXSk6CiAgICAuLi4gICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignYWx3YXlzJykKICAgIC4uLiAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoJ2lnbm9yZScsIG1vZHVsZT0nbnAuY29yZS5mcm9tbnVtZXJpYycpCiAgICAuLi4gICAgICMgZG8gc29tZXRoaW5nIHRoYXQgcmFpc2VzIGEgd2FybmluZyBidXQgaWdub3JlIHRob3NlIGluCiAgICAuLi4gICAgICMgbnAuY29yZS5mcm9tbnVtZXJpYwogICAgcjoAAABGYwMAAAAAAAAAAwAAAAMAAAADAAAAcy4AAAB0AHwCgwGgAXwAagKhAXwAXwNpAHwAXwR0BXQGfACDAmoHfAFkAY0BAQBkAFMAKQJOKQFyTgEAACkI2gNzZXTaBXVuaW9u2g1jbGFzc19tb2R1bGVzcksBAADaD193YXJucmVnX2NvcGllc9oFc3VwZXJyLwAAAHJGAQAAKQNyRAEAAHJOAQAAcksBAAApAdoJX19jbGFzc19fcjoAAAByOwAAAHJGAQAAjQcAAHMGAAAAAAESAQYBeiFjbGVhcl9hbmRfY2F0Y2hfd2FybmluZ3MuX19pbml0X19jAQAAAAAAAAADAAAABAAAAAMAAABzRAAAAHg0fABqAEQAXSp9AXQBfAFkAYMCcgh8AWoCfQJ8AqADoQB8AGoEfAE8AHwCoAWhAAEAcQhXAHQGdAd8AIMCoAihAFMAKQJO2hNfX3dhcm5pbmdyZWdpc3RyeV9fKQlySwEAAHIPAQAAcnIBAAByugAAAHJvAQAA2gVjbGVhcnJwAQAAci8AAAByVgEAACkDckQBAADaA21vZFoHbW9kX3JlZykBcnEBAAByOgAAAHI7AAAAclYBAACSBwAAcwwAAAAAAQwBCgEGAQ4BDAF6ImNsZWFyX2FuZF9jYXRjaF93YXJuaW5ncy5fX2VudGVyX19jAQAAAAAAAAADAAAABQAAAAcAAABzVAAAAHQAdAF8AIMCagJ8AY4AAQB4PnwAagNEAF00fQJ0BHwCZAGDAnIwfAJqBaAGoQABAHwCfABqB2sGchh8AmoFoAh8AGoHfAIZAKEBAQBxGFcAZABTACkCTnJyAQAAKQlycAEAAHIvAAAAclcBAABySwEAAHIPAQAAcnIBAABycwEAAHJvAQAA2gZ1cGRhdGUpA3JEAQAA2ghleGNfaW5mb3J0AQAAKQFycQEAAHI6AAAAcjsAAAByVwEAAJoHAABzDAAAAAABEAEMAQoBCgEKAXohY2xlYXJfYW5kX2NhdGNoX3dhcm5pbmdzLl9fZXhpdF9fKQJGcjoAAAApCXI2AAAAcjcAAAByOAAAAHI5AAAAcm4BAAByRgEAAHJWAQAAclcBAADaDV9fY2xhc3NjZWxsX19yOgAAAHI6AAAAKQFycQEAAHI7AAAAci8AAABiBwAAcwoAAAAIKAQBBAIOBQwIYwAAAAAAAAAAAAAAAAQAAABAAAAAc3QAAABlAFoBZABaAmQBWgNkGGQDZASEAVoEZAVkBoQAWgVlBmQHZAhkCWYEZApkC4QBWgdlBmQHZAhmA2QMZA2EAVoIZQZkB2QIZgNkDmQPhAFaCWQQZBGEAFoKZBJkE4QAWgtkFGQVhABaDGQWZBeEAFoNZAhTACkZcjUAAABhoAsAAAogICAgQ29udGV4dCBtYW5hZ2VyIGFuZCBkZWNvcmF0b3IgZG9pbmcgbXVjaCB0aGUgc2FtZSBhcwogICAgYGB3YXJuaW5ncy5jYXRjaF93YXJuaW5nc2BgLgoKICAgIEhvd2V2ZXIsIGl0IGFsc28gcHJvdmlkZXMgYSBmaWx0ZXIgbWVjaGFuaXNtIHRvIHdvcmsgYXJvdW5kCiAgICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNDE4MC4KCiAgICBUaGlzIGJ1ZyBjYXVzZXMgUHl0aG9uIGJlZm9yZSAzLjQgdG8gbm90IHJlbGlhYmx5IHNob3cgd2FybmluZ3MgYWdhaW4KICAgIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGlnbm9yZWQgb25jZSAoZXZlbiB3aXRoaW4gY2F0Y2hfd2FybmluZ3MpLiBJdAogICAgbWVhbnMgdGhhdCBubyAiaWdub3JlIiBmaWx0ZXIgY2FuIGJlIHVzZWQgZWFzaWx5LCBzaW5jZSBmb2xsb3dpbmcKICAgIHRlc3RzIG1pZ2h0IG5lZWQgdG8gc2VlIHRoZSB3YXJuaW5nLiBBZGRpdGlvbmFsbHkgaXQgYWxsb3dzIGVhc2llcgogICAgc3BlY2lmaWNpdHkgZm9yIHRlc3Rpbmcgd2FybmluZ3MgYW5kIGNhbiBiZSBuZXN0ZWQuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgZm9yd2FyZGluZ19ydWxlIDogc3RyLCBvcHRpb25hbAogICAgICAgIE9uZSBvZiAiYWx3YXlzIiwgIm9uY2UiLCAibW9kdWxlIiwgb3IgImxvY2F0aW9uIi4gQW5hbG9nb3VzIHRvCiAgICAgICAgdGhlIHVzdWFsIHdhcm5pbmdzIG1vZHVsZSBmaWx0ZXIgbW9kZSwgaXQgaXMgdXNlZnVsIHRvIHJlZHVjZQogICAgICAgIG5vaXNlIG1vc3RseSBvbiB0aGUgb3V0bW9zdCBsZXZlbC4gVW5zdXBwcmVzc2VkIGFuZCB1bnJlY29yZGVkCiAgICAgICAgd2FybmluZ3Mgd2lsbCBiZSBmb3J3YXJkZWQgYmFzZWQgb24gdGhpcyBydWxlLiBEZWZhdWx0cyB0byAiYWx3YXlzIi4KICAgICAgICAibG9jYXRpb24iIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHdhcm5pbmdzICJkZWZhdWx0IiwgbWF0Y2ggYnkgZXhhY3QKICAgICAgICBsb2NhdGlvbiB0aGUgd2FybmluZyB3YXJuaW5nIG9yaWdpbmF0ZWQgZnJvbS4KCiAgICBOb3RlcwogICAgLS0tLS0KICAgIEZpbHRlcnMgYWRkZWQgaW5zaWRlIHRoZSBjb250ZXh0IG1hbmFnZXIgd2lsbCBiZSBkaXNjYXJkZWQgYWdhaW4KICAgIHdoZW4gbGVhdmluZyBpdC4gVXBvbiBlbnRlcmluZyBhbGwgZmlsdGVycyBkZWZpbmVkIG91dHNpZGUgYQogICAgY29udGV4dCB3aWxsIGJlIGFwcGxpZWQgYXV0b21hdGljYWxseS4KCiAgICBXaGVuIGEgcmVjb3JkaW5nIGZpbHRlciBpcyBhZGRlZCwgbWF0Y2hpbmcgd2FybmluZ3MgYXJlIHN0b3JlZCBpbiB0aGUKICAgIGBgbG9nYGAgYXR0cmlidXRlIGFzIHdlbGwgYXMgaW4gdGhlIGxpc3QgcmV0dXJuZWQgYnkgYGByZWNvcmRgYC4KCiAgICBJZiBmaWx0ZXJzIGFyZSBhZGRlZCBhbmQgdGhlIGBgbW9kdWxlYGAga2V5d29yZCBpcyBnaXZlbiwgdGhlCiAgICB3YXJuaW5nIHJlZ2lzdHJ5IG9mIHRoaXMgbW9kdWxlIHdpbGwgYWRkaXRpb25hbGx5IGJlIGNsZWFyZWQgd2hlbgogICAgYXBwbHlpbmcgaXQsIGVudGVyaW5nIHRoZSBjb250ZXh0LCBvciBleGl0aW5nIGl0LiBUaGlzIGNvdWxkIGNhdXNlCiAgICB3YXJuaW5ncyB0byBhcHBlYXIgYSBzZWNvbmQgdGltZSBhZnRlciBsZWF2aW5nIHRoZSBjb250ZXh0IGlmIHRoZXkKICAgIHdlcmUgY29uZmlndXJlZCB0byBiZSBwcmludGVkIG9uY2UgKGRlZmF1bHQpIGFuZCB3ZXJlIGFscmVhZHkKICAgIHByaW50ZWQgYmVmb3JlIHRoZSBjb250ZXh0IHdhcyBlbnRlcmVkLgoKICAgIE5lc3RpbmcgdGhpcyBjb250ZXh0IG1hbmFnZXIgd2lsbCB3b3JrIGFzIGV4cGVjdGVkIHdoZW4gdGhlCiAgICBmb3J3YXJkaW5nIHJ1bGUgaXMgImFsd2F5cyIgKGRlZmF1bHQpLiBVbmZpbHRlcmVkIGFuZCB1bnJlY29yZGVkCiAgICB3YXJuaW5ncyB3aWxsIGJlIHBhc3NlZCBvdXQgYW5kIGJlIG1hdGNoZWQgYnkgdGhlIG91dGVyIGxldmVsLgogICAgT24gdGhlIG91dG1vc3QgbGV2ZWwgdGhleSB3aWxsIGJlIHByaW50ZWQgKG9yIGNhdWdodCBieSBhbm90aGVyCiAgICB3YXJuaW5ncyBjb250ZXh0KS4gVGhlIGZvcndhcmRpbmcgcnVsZSBhcmd1bWVudCBjYW4gbW9kaWZ5IHRoaXMKICAgIGJlaGF2aW91ci4KCiAgICBMaWtlIGBgY2F0Y2hfd2FybmluZ3NgYCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyBub3QgdGhyZWFkc2FmZS4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiB3aXRoIHN1cHByZXNzX3dhcm5pbmdzKCkgYXMgc3VwOgogICAgLi4uICAgICBzdXAuZmlsdGVyKERlcHJlY2F0aW9uV2FybmluZywgIlNvbWUgdGV4dCIpCiAgICAuLi4gICAgIHN1cC5maWx0ZXIobW9kdWxlPW5wLm1hLmNvcmUpCiAgICAuLi4gICAgIGxvZyA9IHN1cC5yZWNvcmQoRnV0dXJlV2FybmluZywgIkRvZXMgdGhpcyBvY2N1cj8iKQogICAgLi4uICAgICBjb21tYW5kX2dpdmluZ193YXJuaW5ncygpCiAgICAuLi4gICAgICMgVGhlIEZ1dHVyZVdhcm5pbmcgd2FzIGdpdmVuIG9uY2UsIHRoZSBmaWx0ZXJlZCB3YXJuaW5ncyB3ZXJlCiAgICAuLi4gICAgICMgaWdub3JlZC4g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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 7
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
decorators.cpython-37.pyc
8.14 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
noseclasses.cpython-37.pyc
8.79 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
nosetester.cpython-37.pyc
14.23 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
print_coercion_tables.cpython-37.pyc
2.43 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup.cpython-37.pyc
781 B
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
utils.cpython-37.pyc
61.67 KB
lrw-r--r--
2023-04-24 19:38:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
704 B
lrw-r--r--
2023-04-24 19:38:36
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).