REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 60.92 KB
Close
/opt/alt/python37/lib64/python3.7/logging/__pycache__/__init__.cpython-37.opt-1.pyc
Text
Base64
Qg0NCgAAAACICCBmaiMBAOMAAAAAAAAAAAAAAAAqAAAAQAAAAHMaBAAAZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQCbANaA2QBZAJsBFoEZAFkAmwFWgVkAWQCbAZaBmQBZAJsB1oHZAFkAmwIWglkAWQDbAptC1oLAQBkBGQFZAZkB2QIZAlkCmQLZAxkDWQOZA9kEGQRZBJkE2QUZBVkFmQXZBhkGWQaZBtkHGQdZB5kH2QgZCFkImQjZCRkJWQmZCdkKGQpZCpkK2QsZC1nKloMZAFkAmwNWg1kLloOZC9aD2QwWhBkMVoRZQOgA6EAWhJkMloTZDJaFGQyWhVkMloWZDNaF2UXWhhkNFoZZDVaGmUaWhtkNlocZDdaHWQBWh5lF2QGZRlkCGUaZBZlHGQOZR1kB2UeZBJpBlofZRdlGGUZZRplGmUcZR1lHmQ4nAhaIGQ5ZCCEAFohZDpkF4QAWiJlI2UBZDuDApABclBkPGQ9hABaJG4IZD5kP4QAWiRlAmoloCZlImonaiihAVopZEBkQYQAWiplDaAroQBaLGRCZEOEAFotZERkRYQAWi5lI2UCZEaDApABc55kR2RIhABaL24oZQegMKEAWjFkSWRIhABaL2RKZEuEAFoyZQJqM2UtZTJlLmRMjQMBAEcAZE1kD4QAZA9lNIMDWjVlNWE2ZE5kK4QAWjdkT2QqhABaOGRQZCWEAFo5RwBkUWRShABkUmU0gwNaOkcAZFNkVIQAZFRlOoMDWjtHAGRVZFaEAGRWZTqDA1o8ZFdaPWU6ZT1mAmU7ZFhmAmU8ZFlmAmRanANaPkcAZFtkDIQAZAxlNIMDWj9lP4MAWkBHAGRcZAWEAGQFZTSDA1pBRwBkXWQLhABkC2U0gwNaQkcAZF5kX4QAZF9lNIMDWkNlB6BEoQBaRWcAWkZkYGRhhABaR2RiZGOEAFpIRwBkZGQNhABkDWVDgwNaSUcAZGVkFIQAZBRlSYMDWkpHAGRmZAqEAGQKZUqDA1pLRwBkZ2RohABkaGVKgwNaTGVMZRqDAVpNZU1aTkcAZGlkaoQAZGplNIMDWk9ka2QmhABaUGRsZCKEAFpRRwBkbWRuhABkbmU0gwNaUkcAZG9kEIQAZBBlQ4MDWlNHAGRwZHGEAGRxZVODA1pUZVNhVUcAZHJkEYQAZBFlNIMDWlZlVGUagwFaV2VXZVNfV2VSZVNqV4MBZVNfWGRzZBiEAFpZZIRkdGQhhAFaWmR1ZBqEAFpbZVtaXGR2ZB2EAFpdZDJkd5wBZHhkHoQCWl5keWQphABaX2R6ZCiEAFpgZHtkI4QAWmFkfGQbhABaYmR9ZCSEAFpjZRdmAWR+ZByEAVpkZUZmAWR/ZCeEAVplZAFkAmxmWmZlZqBnZWWhAQEARwBkgGQThABkE2VJgwNaaGQCYWlkhWSBZIKEAVpqZINkGYQAWmtkAlMAKYZ6wgpMb2dnaW5nIHBhY2thZ2UgZm9yIFB5dGhvbi4gQmFzZWQgb24gUEVQIDI4MiBhbmQgY29tbWVudHMgdGhlcmV0byBpbgpjb21wLmxhbmcucHl0aG9uLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgpUbyB1c2UsIHNpbXBseSAnaW1wb3J0IGxvZ2dpbmcnIGFuZCBsb2cgYXdheSEK6QAAAABOKQHaCFRlbXBsYXRl2gxCQVNJQ19GT1JNQVTaEkJ1ZmZlcmluZ0Zvcm1hdHRlctoIQ1JJVElDQUzaBURFQlVH2gVFUlJPUtoFRkFUQUzaC0ZpbGVIYW5kbGVy2gZGaWx0ZXLaCUZvcm1hdHRlctoHSGFuZGxlctoESU5GT9oJTG9nUmVjb3Jk2gZMb2dnZXLaDUxvZ2dlckFkYXB0ZXLaBk5PVFNFVNoLTnVsbEhhbmRsZXLaDVN0cmVhbUhhbmRsZXLaBFdBUk7aB1dBUk5JTkfaDGFkZExldmVsTmFtZdoLYmFzaWNDb25maWfaD2NhcHR1cmVXYXJuaW5nc9oIY3JpdGljYWzaBWRlYnVn2gdkaXNhYmxl2gVlcnJvctoJZXhjZXB0aW9u2gVmYXRhbNoMZ2V0TGV2ZWxOYW1l2glnZXRMb2dnZXLaDmdldExvZ2dlckNsYXNz2gRpbmZv2gNsb2faDW1ha2VMb2dSZWNvcmTaDnNldExvZ2dlckNsYXNz2ghzaHV0ZG93btoEd2FybtoHd2FybmluZ9oTZ2V0TG9nUmVjb3JkRmFjdG9yedoTc2V0TG9nUmVjb3JkRmFjdG9yedoKbGFzdFJlc29ydNoPcmFpc2VFeGNlcHRpb25zeiZWaW5heSBTYWppcCA8dmluYXlfc2FqaXBAcmVkLWRvdmUuY29tPloKcHJvZHVjdGlvbnoHMC41LjEuMnoQMDcgRmVicnVhcnkgMjAxMFTpMgAAAOkoAAAA6R4AAADpFAAAAOkKAAAAKQhyBQAAAHIIAAAAcgcAAAByFAAAAHIVAAAAcg0AAAByBgAAAHIRAAAAYwEAAAAAAAAAAgAAAAMAAABDAAAAczQAAAB0AKABfAChAX0BfAFkAWsJchZ8AVMAdAKgAXwAoQF9AXwBZAFrCXIsfAFTAGQCfAAWAFMAKQNhDwIAAAogICAgUmV0dXJuIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIGxvZ2dpbmcgbGV2ZWwgJ2xldmVsJy4KCiAgICBJZiB0aGUgbGV2ZWwgaXMgb25lIG9mIHRoZSBwcmVkZWZpbmVkIGxldmVscyAoQ1JJVElDQUwsIEVSUk9SLCBXQVJOSU5HLAogICAgSU5GTywgREVCVUcpIHRoZW4geW91IGdldCB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmcuIElmIHlvdSBoYXZlCiAgICBhc3NvY2lhdGVkIGxldmVscyB3aXRoIG5hbWVzIHVzaW5nIGFkZExldmVsTmFtZSB0aGVuIHRoZSBuYW1lIHlvdSBoYXZlCiAgICBhc3NvY2lhdGVkIHdpdGggJ2xldmVsJyBpcyByZXR1cm5lZC4KCiAgICBJZiBhIG51bWVyaWMgdmFsdWUgY29ycmVzcG9uZGluZyB0byBvbmUgb2YgdGhlIGRlZmluZWQgbGV2ZWxzIGlzIHBhc3NlZAogICAgaW4sIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyByZXR1cm5lZC4KCiAgICBPdGhlcndpc2UsIHRoZSBzdHJpbmcgIkxldmVsICVzIiAlIGxldmVsIGlzIHJldHVybmVkLgogICAgTnoITGV2ZWwgJXMpA9oMX2xldmVsVG9OYW1l2gNnZXTaDF9uYW1lVG9MZXZlbCkC2gVsZXZlbNoGcmVzdWx0qQByNwAAAPo1L29wdC9hbHQvcHl0aG9uMzcvbGliNjQvcHl0aG9uMy43L2xvZ2dpbmcvX19pbml0X18ucHlyHwAAAHUAAABzDgAAAAAPCgEIAQQBCgEIAQQBYwIAAAAAAAAA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IGFyZSB1c2VkIHRvIGNvbnZlcnQgYSBMb2dSZWNvcmQgdG8gdGV4dC4KCiAgICBGb3JtYXR0ZXJzIG5lZWQgdG8ga25vdyBob3cgYSBMb2dSZWNvcmQgaXMgY29uc3RydWN0ZWQuIFRoZXkgYXJlCiAgICByZXNwb25zaWJsZSBmb3IgY29udmVydGluZyBhIExvZ1JlY29yZCB0byAodXN1YWxseSkgYSBzdHJpbmcgd2hpY2ggY2FuCiAgICBiZSBpbnRlcnByZXRlZCBieSBlaXRoZXIgYSBodW1hbiBvciBhbiBleHRlcm5hbCBzeXN0ZW0uIFRoZSBiYXNlIEZvcm1hdHRlcgogICAgYWxsb3dzIGEgZm9ybWF0dGluZyBzdHJpbmcgdG8gYmUgc3BlY2lmaWVkLiBJZiBub25lIGlzIHN1cHBsaWVkLCB0aGUKICAgIHRoZSBzdHlsZS1kZXBlbmRlbnQgZGVmYXVsdCB2YWx1ZSwgIiUobWVzc2FnZSlzIiwgInttZXNzYWdlfSIsIG9yCiAgICAiJHttZXNzYWdlfSIsIGlzIHVzZWQuCgogICAgVGhlIEZvcm1hdHRlciBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBhIGZvcm1hdCBzdHJpbmcgd2hpY2ggbWFrZXMgdXNlIG9mCiAgICBrbm93bGVkZ2Ugb2YgdGhlIExvZ1JlY29yZCBhdHRyaWJ1dGVzIC0gZS5nLiB0aGUgZGVmYXVsdCB2YWx1ZSBtZW50aW9uZWQKICAgIGFib3ZlIG1ha2VzIHVzZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSB1c2VyJ3MgbWVzc2FnZSBhbmQgYXJndW1lbnRzIGFyZSBwcmUtCiAgICBmb3JtYXR0ZWQgaW50byBhIExvZ1JlY29yZCdzIG1lc3NhZ2UgYXR0cmlidXRlLiBDdXJyZW50bHksIHRoZSB1c2VmdWwKICAgIGF0dHJpYnV0ZXMgaW4gYSBMb2dSZWNvcmQgYXJlIGRlc2NyaWJlZCBieToKCiAgICAlKG5hbWUpcyAgICAgICAgICAgIE5hbWUgb2YgdGhlIGxvZ2dlciAobG9nZ2luZyBjaGFubmVsKQogICAgJShsZXZlbG5vKXMgICAgICAgICBOdW1lcmljIGxvZ2dpbmcgbGV2ZWwgZm9yIHRoZSBtZXNzYWdlIChERUJVRywgSU5GTywKICAgICAgICAgICAgICAgICAgICAgICAgV0FSTklORywgRVJST1IsIENSSVRJQ0FMKQogICAgJShsZXZlbG5hbWUpcyAgICAgICBUZXh0IGxvZ2dpbmcgbGV2ZWwgZm9yIHRoZSBtZXNzYWdlICgiREVCVUciLCAiSU5GTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJXQVJOSU5HIiwgIkVSUk9SIiwgIkNSSVRJQ0FMIikKICAgICUocGF0aG5hbWUpcyAgICAgICAgRnVsbCBwYXRobmFtZSBvZiB0aGUgc291cmNlIGZpbGUgd2hlcmUgdGhlIGxvZ2dpbmcKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbCB3YXMgaXNzdWVkIChpZiBhdmFpbGFibGUpCiAgICAlKGZpbGVuYW1lKXMgICAgICAgIEZpbGVuYW1lIHBvcnRpb24gb2YgcGF0aG5hbWUKICAgICUobW9kdWxlKXMgICAgICAgICAgTW9kdWxlIChuYW1lIHBvcnRpb24gb2YgZmlsZW5hbWUpCiAgICAlKGxpbmVubylkICAgICAgICAgIFNvdXJjZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgbG9nZ2luZyBjYWxsIHdhcyBpc3N1ZWQKICAgICAgICAgICAgICAgICAgICAgICAgKGlmIGF2YWlsYWJsZSkKICAgICUoZnVuY05hbWUpcyAgICAgICAgRnVuY3Rpb24gbmFtZQogICAgJShjcmVhdGVkKWYgICAgICAgICBUaW1lIHdoZW4gdGhlIExvZ1JlY29yZCB3YXMgY3JlYXRlZCAodGltZS50aW1lKCkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKQogICAgJShhc2N0aW1lKXMgICAgICAgICBUZXh0dWFsIHRpbWUgd2hlbiB0aGUgTG9nUmVjb3JkIHdhcyBjcmVhdGVkCiAgICAlKG1zZWNzKWQgICAgICAgICAgIE1pbGxpc2Vjb25kIHBvcnRpb24gb2YgdGhlIGNyZWF0aW9uIHRpbWUKICAgICUocmVsYXRpdmVDcmVhdGVkKWQgVGltZSBpbiBtaWxsaXNlY29uZHMgd2hl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ICAgYmFzaWMgYmVoYXZpb3VyIGlzIGFzIGZvbGxvd3M6IGlmIGRhdGVmbXQgKGEgc3RyaW5nKSBpcyBzcGVjaWZpZWQsCiAgICAgICAgaXQgaXMgdXNlZCB3aXRoIHRpbWUuc3RyZnRpbWUoKSB0byBmb3JtYXQgdGhlIGNyZWF0aW9uIHRpbWUgb2YgdGhlCiAgICAgICAgcmVjb3JkLiBPdGhlcndpc2UsIGFuIElTTzg2MDEtbGlrZSAob3IgUkZDIDMzMzktbGlrZSkgZm9ybWF0IGlzIHVzZWQuCiAgICAgICAgVGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gdXNlcyBhIHVzZXItY29uZmlndXJhYmxlCiAgICAgICAgZnVuY3Rpb24gdG8gY29udmVydCB0aGUgY3JlYXRpb24gdGltZSB0byBhIHR1cGxlLiBCeSBkZWZhdWx0LAogICAgICAgIHRpbWUubG9jYWx0aW1lKCkgaXMgdXNlZDsgdG8gY2hhbmdlIHRoaXMgZm9yIGEgcGFydGljdWxhciBmb3JtYXR0ZXIKICAgICAgICBpbnN0YW5jZSwgc2V0IHRoZSAnY29udmVydGVyJyBhdHRyaWJ1dGUgdG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lCiAgICAgICAgc2lnbmF0dXJlIGFzIHRpbWUubG9jYWx0aW1lKCkgb3IgdGltZS5nbXRpbWUoKS4gVG8gY2hhbmdlIGl0IGZvciBhbGwKICAgICAgICBmb3JtYXR0ZXJzLCBmb3IgZXhhbXBsZSBpZiB5b3Ugd2FudCBhbGwgbG9nZ2luZyB0aW1lcyB0byBiZSBzaG93biBpbiBHTVQsCiAgICAgICAgc2V0IHRoZSAnY29udmVydGVyJyBhdHRyaWJ1dGUgaW4gdGhlIEZvcm1hdHRlciBjbGFzcy4KICAgICAgICApB9oJY29udmVydGVycnIAAAByXgAAAFoIc3RyZnRpbWXaE2RlZmF1bHRfdGltZV9mb3JtYXTaE2RlZmF1bHRfbXNlY19mb3JtYXRycwAAACkGcn0AAABylwAAAHKlAAAAcoEAAADaAXPaAXRyNwAAAHI3AAAAcjgAAADaCmZvcm1hdFRpbWUQAgAAcwwAAAAA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IiBpcyBkZWZpbmVkIGlzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXIuIFNpbmNlIGFuCiAgICBhcHBsaWNhdGlvbiBjYW4gaGF2ZSBhbnkgbnVtYmVyIG9mIGFyZWFzLCBsb2dnaW5nIGNoYW5uZWxzIGFyZSBpZGVudGlmaWVkCiAgICBieSBhIHVuaXF1ZSBzdHJpbmcuIEFwcGxpY2F0aW9uIGFyZWFzIGNhbiBiZSBuZXN0ZWQgKGUuZy4gYW4gYXJlYQogICAgb2YgImlucHV0IHByb2Nlc3NpbmciIG1pZ2h0IGluY2x1ZGUgc3ViLWFyZWFzICJyZWFkIENTViBmaWxlcyIsICJyZWFkCiAgICBYTFMgZmlsZXMiIGFuZCAicmVhZCBHbnVtZXJpYyBmaWxlcyIpLiBUbyBjYXRlciBmb3IgdGhpcyBuYXR1cmFsIG5lc3RpbmcsCiAgICBjaGFubmVsIG5hbWVzIGFyZSBvcmdhbml6ZWQgaW50byBhIG5hbWVzcGFjZSBoaWVyYXJjaHkgd2hlcmUgbGV2ZWxzIGFyZQogICAgc2VwYXJhdGVkIGJ5IHBlcmlvZHMsIG11Y2ggbGlrZSB0aGUgSmF2YSBvciBQeXRob24gcGFja2FnZSBuYW1lc3BhY2UuIFNvCiAgICBpbiB0aGUgaW5zdGFuY2UgZ2l2ZW4gYWJvdmUsIGNoYW5uZWwgbmFtZXMgbWlnaHQgYmUgImlucHV0IiBmb3IgdGhlIHVwcGVyCiAgICBsZXZlbCwgYW5kICJpbnB1dC5jc3YiLCAiaW5wdXQueGxzIiBhbmQgImlucHV0LmdudSIgZm9yIHRoZSBzdWItbGV2ZWxzLgogICAgVGhlcmUgaXMgbm8gYXJiaXRyYXJ5IGxpbWl0IHRvIHRoZSBkZXB0aCBvZiBuZXN0aW5nLgogICAgYwMAAAAAAAAAAwAAAAMAAABDAAAAczwAAAB0AKABfAChAQEAfAF8AF8CdAN8AoMBfABfBGQBfABfBWQCfABfBmcAfABfB2QDfABfCGkAfABfCWQBUwApBHpKCiAgICAgICAgSW5pdGlhbGl6ZSB0aGUgbG9nZ2VyIHdpdGggYSBuYW1lIGFuZCBhbiBvcHRpb25hbCBsZXZlbC4KICAgICAgICBOVEYpCnLEAAAAcoIAAAByXwAAAHJMAAAAcjUAAAByDAEAANoJcHJvcGFnYXRlcs0AAADaCGRpc2FibGVkchEBAAApA3J9AAAAcl8AAAByNQAAAHI3AAAAcjcAAAByOAAAAHKCAAAAOAUAAHMQAAAAAAQKAQYBCgEGAQYBBgEGAXoPTG9nZ2VyLl9faW5pdF9fYwIAAAAAAAAAAgAAAAIAAABDAAAAcxgAAAB0AHwBgwF8AF8BfABqAqADoQABAGQBUwApAnpXCiAgICAgICAgU2V0IHRoZSBsb2dnaW5nIGxldmVsIG9mIHRoaXMgbG9nZ2VyLiAgbGV2ZWwgbXVzdCBiZSBhbiBpbnQgb3IgYSBzdHIuCiAgICAgICAgTikEckwAAAByNQAAAHIHAQAAchQBAAApAnJ9AAAAcjUAAAByNwAAAHI3AAAAcjgAAABy2QAAAEUFAABzBAAAAAAECgF6D0xvZ2dlci5zZXRMZXZlbGMCAAAAAAAAAAQAAAAEAAAATwAAAHMgAAAAfACgAHQBoQFyHHwAagJ0AXwBfAJmA3wDjgEBAGQBUwApAnrwCiAgICAgICAgTG9nICdtc2cgJSBhcmdzJyB3aXRoIHNldmVyaXR5ICdERUJVRycuCgogICAgICAgIFRvIHBhc3MgZXhjZXB0aW9uIGluZm9ybWF0aW9uLCB1c2UgdGhlIGtleXdvcmQgYXJndW1lbnQgZXhjX2luZm8gd2l0aAogICAgICAgIGEgdHJ1ZSB2YWx1ZSwgZS5nLgoKICAgICAgICBsb2dnZXIuZGVidWcoIkhvdXN0b24sIHdlIGhhdmUgYSAlcyIsICJ0aG9ybnkgcHJvYmxlbSIsIGV4Y19pbmZvPTEpCiAgICAgICAgTikD2gxpc0VuYWJsZWRGb3JyBgAAANoEX2xvZykEcn0AAAByYAAAAHJlAAAAcoAAAAByNwAAAHI3AAAAcjgAAAByGgAAAEwFAABzBAAAAAAJCgF6DExvZ2dlci5kZWJ1Z2MCAAAAAAAAAAQAAAAEAAAATwAAAHMgAAAAfACgAHQBoQFyHHwAagJ0AXwBfAJmA3wDjgEBAGQBUwApAnrzCiAgICAgICAgTG9nICdtc2cgJSBhcmdzJyB3aXRoIHNldmVyaXR5ICdJTkZPJy4KCiAgICAgICAgVG8gcGFzcyBleGNlcHRpb24gaW5mb3JtYXRpb24sIHVzZSB0aGUga2V5d29yZCBhcmd1bWVudCBleGNfaW5mbyB3aXRoCiAgICAgICAgYSB0cnVlIHZhbHVlLCBlLmcuCgogICAgICAgIGxvZ2dlci5pbmZvKCJIb3VzdG9uLCB3ZSBoYXZlIGEgJXMiLCAiaW50ZXJlc3RpbmcgcHJvYmxlbSIsIGV4Y19pbmZvPTEpCiAgICAgICAgTikDchcBAAByDQAAAHIYAQAAKQRyfQAAAHJgAAAAcmUAAABygAAAAHI3AAAAcjcAAAByOAAAAHIiAAAAWAUAAHMEAAAAAAkKAXoLTG9nZ2VyLmluZm9jAgAAAAAAAAAEAAAABAAAAE8AAABzIAAAAHwAoAB0AaEBchx8AGoCdAF8AXwCZgN8A44BAQBkAVMAKQJ69gogICAgICAgIExvZyAnbXNnICUgYXJncycgd2l0aCBzZXZlcml0eSAnV0FSTklORycuCgogICAgICAgIFRvIHBhc3MgZXhjZXB0aW9uIGluZm9ybWF0aW9uLCB1c2UgdGhlIGtleXdvcmQgYXJndW1lbnQgZXhjX2luZm8gd2l0aAogICAgICAgIGEgdHJ1ZSB2YWx1ZSwgZS5nLgoKICAgICAgICBsb2dnZXIud2FybmluZygiSG91c3Rvbiwgd2UgaGF2ZSBhICVzIiwgImJpdCBvZiBhIHByb2JsZW0iLCBleGNfaW5mbz0xKQogICAgICAgIE4pA3IXAQAAchUAAAByGAEAACkEcn0AAAByYAAAAHJlAAAAcoAAAAByNwAAAHI3AAAAcjgAAAByKAAAAGQFAABzBAAAAAAJCgF6DkxvZ2dlci53YXJuaW5nYwIAAAAAAAAABAAAAAUAAABPAAAAcyQAAAB0AKABZAF0AmQCoQMBAHwAagN8AWYBfAKeAnwDjgEBAGQAUwApA056NlRoZSAnd2FybicgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIHVzZSAnd2FybmluZycgaW5zdGVhZHJAAAAAKQTaCHdhcm5pbmdzcicAAADaEkRlcHJlY2F0aW9uV2FybmluZ3IoAAAAKQRyfQAAAHJgAAAAcmUAAABygAAAAHI3AAAAcjcAAAByOAAAAHInAAAAcAUAAHMGAAAAAAEGAQgBegtMb2dnZXIud2FybmMCAAAAAAAAAAQAAAAEAAAATwAAAHMgAAAAfACgAHQBoQFyHHwAagJ0AXwBfAJmA3wDjgEBAGQBUwApAnrvCiAgICAgICAgTG9nICdtc2cgJSBhcmdzJyB3aXRoIHNldmVyaXR5ICdFUlJPUicuCgogICAgICAgIFRvIHBhc3MgZXhjZXB0aW9uIGluZm9ybWF0aW9uLCB1c2UgdGhlIGtleXdvcmQgYXJndW1lbnQgZXhjX2luZm8gd2l0aAogICAgICAgIGEgdHJ1ZSB2YWx1ZSwgZS5nLgoKICAgICAgICBsb2dnZXIuZXJyb3IoIkhvdXN0b24sIHdlIGhhdmUgYSAlcyIsICJtYWpvciBwcm9ibGVtIiwgZXhjX2luZm89MSkKICAgICAgICBOKQNyFwEAAHIHAAAAchgBAAApBHJ9AAAAcmAAAAByZQAAAHKAAAAAcjcAAAByNwAAAHI4AAAAchwAAAB1BQAAcwQAAAAACQoBegxMb2dnZXIuZXJyb3JUKQFyQgAAAGMCAAAAAQAAAAUAAAAEAAAATwAAAHMeAAAAfABqAHwBZgF8A54CZAF8AmkBfASXAo4BAQBkAlMAKQN6VQogICAgICAgIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgbG9nZ2luZyBhbiBFUlJPUiB3aXRoIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KICAgICAgICByQgAAAE4pAXIcAAAAKQVyfQAAAHJgAAAAckIAAAByZQAAAHKAAAAAcjcAAAByNwAAAHI4AAAAch0AAACBBQAAcwIAAAAABHoQTG9nZ2VyLmV4Y2VwdGlvbmMCAAAAAAAAAAQAAAAEAAAATwAAAHMgAAAAfACgAHQBoQFyHHwAagJ0AXwBfAJmA3wDjgEBAGQBUwApAnr2CiAgICAgICAgTG9nICdtc2cgJSBhcmdzJyB3aXRoIHNldmVyaXR5ICdDUklUSUNBTCcuCgogICAgICAgIFRvIHBhc3MgZXhjZXB0aW9uIGluZm9ybWF0aW9uLCB1c2UgdGhlIGtleXdvcmQgYXJndW1lbnQgZXhjX2luZm8gd2l0aAogICAgICAgIGEgdHJ1ZSB2YWx1ZSwgZS5nLgoKICAgICAgICBsb2dnZXIuY3JpdGljYWwoIkhvdXN0b24sIHdlIGhhdmUgYSAlcyIsICJtYWpvciBkaXNhc3RlciIsIGV4Y19pbmZvPTEpCiAgICAgICAgTikDchcBAAByBQAAAHIYAQAAKQRyfQAAAHJgAAAAcmUAAABygAAAAHI3AAAAcjcAAAByOAAAAHIZAAAAhwUAAHMEAAAAAAkKAXoPTG9nZ2VyLmNyaXRpY2FsYwMAAAAAAAAABQAAAAQAAABPAAAAczwAAAB0AHwBdAGDAnMcdAJyGHQDZAGDAYIBbgRkAlMAfACgBHwBoQFyOHwAagV8AXwCfANmA3wEjgEBAGQCUwApA3r8CiAgICAgICAgTG9nICdtc2cgJSBhcmdzJyB3aXRoIHRoZSBpbnRlZ2VyIHNldmVyaXR5ICdsZXZlbCcuCgogICAgICAgIFRvIHBhc3MgZXhjZXB0aW9uIGluZm9ybWF0aW9uLCB1c2UgdGhlIGtleXdvcmQgYXJndW1lbnQgZXhjX2luZm8gd2l0aAogICAgICAgIGEgdHJ1ZSB2YWx1ZSwgZS5nLgoKICAgICAgICBsb2dnZXIubG9nKGxldmVsLCAiV2UgaGF2ZSBhICVzIiwgIm15c3RlcmlvdXMgcHJvYmxlbSIsIGV4Y19pbmZvPTEpCiAgICAgICAgehhsZXZlbCBtdXN0IGJlIGFuIGludGVnZXJOKQZyRgAAAHJHAAAAciwAAABySgAAAHIXAQAAchgBAAApBXJ9AAAAcjUAAAByYAAAAHJlAAAAcoAAAAByNwAAAHI3AAAAcjgAAAByIwAAAJUFAABzDAAAAAAJCgEEAQoCBAEKAXoKTG9nZ2VyLmxvZ0ZjAgAAAAAAAAAIAAAABAAAAEMAAABztAAAAHQAgwB9AnwCZAFrCXIUfAJqAX0CZAJ9A3iWdAJ8AmQDgwJyrnwCagN9BHQEagWgBnwEagehAX0FfAV0CGsCckh8AmoBfQJxGmQBfQZ8AXKYdAmgCqEAfQd8B6ALZAShAQEAdAxqDXwCfAdkBY0CAQB8B6AOoQB9BnwGZAYZAGQHawJykHwGZAFkBoUCGQB9BnwHoA+hAAEAfARqB3wCahB8BGoRfAZmBH0DUABxGlcAfANTACkIeoUKICAgICAgICBGaW5kIHRoZSBzdGFjayBmcmFtZSBvZiB0aGUgY2FsbGVyIHNvIHRoYXQgd2UgY2FuIG5vdGUgdGhlIHNvdXJjZQogICAgICAgIGZpbGUgbmFtZSwgbGluZSBudW1iZXIgYW5kIGZ1bmN0aW9uIG5hbWUuCiAgICAgICAgTikEeg4odW5rbm93biBmaWxlKXIBAAAAehIodW5rbm93biBmdW5jdGlvbilOcuEAAAB6H1N0YWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgopAXJVAAAAcq0AAAByrgAAACkSckUAAAByRAAAAHJ7AAAAcuEAAAByaAAAAHJpAAAA2ghub3JtY2FzZXLiAAAA2ghfc3JjZmlsZXKvAAAAcrAAAABy3wAAAHKxAAAAcuQAAAByswAAAHK0AAAA2ghmX2xpbmVub9oHY29fbmFtZSkIcn0AAABycAAAAHLKAAAAcksAAADaAmNvcmsAAAByfwAAAHK1AAAAcjcAAAByNwAAAHI4AAAA2gpmaW5kQ2FsbGVypgUAAHMsAAAAAAUGAwgBBgEEAQwBBgEOAQgBBgECAQQBBAEIAQoBDgEIAQwBDAEIARIBBgF6EUxvZ2dlci5maW5kQ2FsbGVyTmMLAAAAAAAAAA0AAAAKAAAAQwAAAHNeAAAAdAB8AXwCfAN8BHwFfAZ8B3wIfAqDCX0LfAlkAWsJclp4OHwJRABdMH0MfAxkAmsGczx8DHwLagFrBnJIdAJkA3wMFgCDAYIBfAl8DBkAfAtqAXwMPABxJlcAfAtTACkEenIKICAgICAgICBBIGZhY3RvcnkgbWV0aG9kIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIGluIHN1YmNsYXNzZXMgdG8gY3JlYXRlCiAgICAgICAgc3BlY2lhbGl6ZWQgTG9nUmVjb3Jkcy4KICAgICAgICBOKQJyugAAAHK7AAAAeiRBdHRlbXB0IHRvIG92ZXJ3cml0ZSAlciBpbiBMb2dSZWNvcmQpA3KKAAAAco0AAADaCEtleUVycm9yKQ1yfQAAAHJfAAAAcjUAAADaAmZu2gNsbm9yYAAAAHJlAAAAckIAAAByfgAAANoFZXh0cmFyfwAAAHJLAAAA2gNrZXlyNwAAAHI3AAAAcjgAAADaCm1ha2VSZWNvcmTEBQAAcxAAAAAABhIBBgEIAQoBEgEMARIBehFMb2dnZXIubWFrZVJlY29yZGMHAAAAAAAAAAwAAAAMAAAAQwAAAHOoAAAAZAF9B3QAckB5FnwAoAF8BqEBXAR9CH0JfQp9B1cAcUoEAHQCawpyPAEAAQABAGQCXAN9CH0JfQpZAHFKWABuCmQCXAN9CH0JfQp8BHJ8dAN8BHQEgwJyanQFfASDAXwEfARqBmYDfQRuEnQDfAR0B4MCc3x0CKAJoQB9BHwAoAp8AGoLfAF8CHwJfAJ8A3wEfAp8BXwHoQp9C3wAoAx8C6EBAQBkAVMAKQN6kgogICAgICAgIExvdy1sZXZlbCBsb2dnaW5nIHJvdXRpbmUgd2hpY2ggY3JlYXRlcyBhIExvZ1JlY29yZCBhbmQgdGhlbiBjYWxscwogICAgICAgIGFsbCB0aGUgaGFuZGxlcnMgb2YgdGhpcyBsb2dnZXIgdG8gaGFuZGxlIHRoZSByZWNvcmQuCiAgICAgICAgTikDeg4odW5rbm93biBmaWxlKXIBAAAAehIodW5rbm93biBmdW5jdGlvbikpDXIcAQAAciABAABySQAAAHJGAAAA2g1CYXNlRXhjZXB0aW9u2gR0eXBl2g1fX3RyYWNlYmFja19f2gV0dXBsZXI9AAAAckIAAAByJgEAAHJfAAAActwAAAApDHJ9AAAAcjUAAAByYAAAAHJlAAAAckIAAAByJAEAAHJwAAAAcn8AAAByIgEAAHIjAQAAcn4AAABylwAAAHI3AAAAcjcAAAByOAAAAHIYAQAA0wUAAHMeAAAAAAUEAQQEAgEWAQ4BEgIKAQQBCgESAQoBCAESAQwBegtMb2dnZXIuX2xvZ2MCAAAAAAAAAAIAAAADAAAAQwAAAHMeAAAAfABqAHMafACgAXwBoQFyGnwAoAJ8AaEBAQBkAVMAKQJ61QogICAgICAgIENhbGwgdGhlIGhhbmRsZXJzIGZvciB0aGUgc3BlY2lmaWVkIHJlY29yZC4KCiAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCBmb3IgdW5waWNrbGVkIHJlY29yZHMgcmVjZWl2ZWQgZnJvbSBhIHNvY2tldCwgYXMKICAgICAgICB3ZWxsIGFzIHRob3NlIGNyZWF0ZWQgbG9jYWxseS4gTG9nZ2VyLWxldmVsIGZpbHRlcmluZyBpcyBhcHBsaWVkLgogICAgICAgIE4pA3IWAQAAcsMAAADaDGNhbGxIYW5kbGVycykCcn0AAABylwAAAHI3AAAAcjcAAAByOAAAAHLcAAAA7AUAAHMEAAAAAAcQAXoNTG9nZ2VyLmhhbmRsZWMCAAAAAAAAAAIAAAAHAAAAQwAAAHMuAAAAdACDAAEAehp8AXwAagFrB3IefABqAaACfAGhAQEAVwBkAXQDgwABAFgAZAFTACkCejsKICAgICAgICBBZGQgdGhlIHNwZWNpZmllZCBoYW5kbGVyIHRvIHRoaXMgbG9nZ2VyLgogICAgICAgIE4pBHI5AAAAcs0AAAByxgAAAHI6AAAAKQJyfQAAANoEaGRscnI3AAAAcjcAAAByOAAAANoKYWRkSGFuZGxlcvYFAABzCgAAAAAEBgECAQoBEAJ6EUxvZ2dlci5hZGRIYW5kbGVyYwIAAAAAAAAAAgAAAAcAAABDAAAAcy4AAAB0AIMAAQB6GnwBfABqAWsGch58AGoBoAJ8AaEBAQBXAGQBdAODAAEAWABkAVMAKQJ6QAogICAgICAgIFJlbW92ZSB0aGUgc3BlY2lmaWVkIGhhbmRsZXIgZnJvbSB0aGlzIGxvZ2dlci4KICAgICAgICBOKQRyOQAAAHLNAAAAcsgAAAByOgAAACkCcn0AAAByLAEAAHI3AAAAcjcAAAByOAAAANoNcmVtb3ZlSGFuZGxlcgEGAABzCgAAAAAEBgECAQoBEAJ6FExvZ2dlci5yZW1vdmVIYW5kbGVyYwEAAAAAAAAAAwAAAAEAAABDAAAAczIAAAB8AH0BZAF9AngkfAFyLHwBagByGmQCfQJQAHwBagFzJFAAcQp8AWoCfQFxClcAfAJTACkDYaIBAAAKICAgICAgICBTZWUgaWYgdGhpcyBsb2dnZXIgaGFzIGFueSBoYW5kbGVycyBjb25maWd1cmVkLgoKICAgICAgICBMb29wIHRocm91Z2ggYWxsIGhhbmRsZXJzIGZvciB0aGlzIGxvZ2dlciBhbmQgaXRzIHBhcmVudHMgaW4gdGhlCiAgICAgICAgbG9nZ2VyIGhpZXJhcmNoeS4gUmV0dXJuIFRydWUgaWYgYSBoYW5kbGVyIHdhcyBmb3VuZCwgZWxzZSBGYWxzZS4KICAgICAgICBTdG9wIHNlYXJjaGluZyB1cCB0aGUgaGllcmFyY2h5IHdoZW5ldmVyIGEgbG9nZ2VyIHdpdGggdGhlICJwcm9wYWdhdGUiCiAgICAgICAgYXR0cmlidXRlIHNldCB0byB6ZXJvIGlzIGZvdW5kIC0gdGhhdCB3aWxsIGJlIHRoZSBsYXN0IGxvZ2dlciB3aGljaAogICAgICAgIGlzIGNoZWNrZWQgZm9yIHRoZSBleGlzdGVuY2Ugb2YgaGFuZGxlcnMuCiAgICAgICAgRlQpA3LNAAAAchUBAAByDAEAACkDcn0AAAByDwEAAHJLAAAAcjcAAAByNwAAAHI4AAAA2gtoYXNIYW5kbGVycwwGAABzFAAAAAAKBAEEAQYBBgEEAQIBBgEEAgoBehJMb2dnZXIuaGFzSGFuZGxlcnNjAgAAAAAAAAAFAAAABAAAAEMAAABzoAAAAHwAfQJkAX0DeEh8AnJQeCx8AmoARABdIn0EfANkAhcAfQN8AWoBfARqAmsFchZ8BKADfAGhAQEAcRZXAHwCagRzSGQDfQJxCnwCagV9AnEKVwB8A2QBawJynHQGcnZ8AWoBdAZqAmsFcpx0BqADfAGhAQEAbiZ0B3KcfABqCGoJc5x0CmoLoAxkBHwAag0WAKEBAQBkBXwAaghfCWQDUwApBmGcAQAACiAgICAgICAgUGFzcyBhIHJlY29yZCB0byBhbGwgcmVsZXZhbnQgaGFuZGxlcnMuCgogICAgICAgIExvb3AgdGhyb3VnaCBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgbG9nZ2VyIGFuZCBpdHMgcGFyZW50cyBpbiB0aGUKICAgICAgICBsb2dnZXIgaGllcmFyY2h5LiBJZiBubyBoYW5kbGVyIHdhcyBmb3VuZCwgb3V0cHV0IGEgb25lLW9mZiBlcnJvcgogICAgICAgIG1lc3NhZ2UgdG8gc3lzLnN0ZGVyci4gU3RvcCBzZWFyY2hpbmcgdXAgdGhlIGhpZXJhcmNoeSB3aGVuZXZlciBhCiAgICAgICAgbG9nZ2VyIHdpdGggdGhlICJwcm9wYWdhdGUiIGF0dHJpYnV0ZSBzZXQgdG8gemVybyBpcyBmb3VuZCAtIHRoYXQKICAgICAgICB3aWxsIGJlIHRoZSBsYXN0IGxvZ2dlciB3aG9zZSBoYW5kbGVycyBhcmUgY2FsbGVkLgogICAgICAgIHIBAAAAclwAAABOeitObyBoYW5kbGVycyBjb3VsZCBiZSBmb3VuZCBmb3IgbG9nZ2VyICIlcyIKVCkOcs0AAAByZgAAAHI1AAAActwAAAByFQEAAHIMAQAAcisAAAByLAAAAHIHAQAAcgMBAAByPQAAAHJYAAAAct8AAAByXwAAACkFcn0AAABylwAAAHIPAQAA2gVmb3VuZHIsAQAAcjcAAAByNwAAAHI4AAAAcisBAAAiBgAAcyQAAAAACgQBBAEGAQwBCAEMAQ4BBgEGAgoBCAEEAQwBDAEMAQgBCgF6E0xvZ2dlci5jYWxsSGFuZGxlcnNjAQAAAAAAAAACAAAAAQAAAEMAAABzJAAAAHwAfQF4GnwBch58AWoAchZ8AWoAUwB8AWoBfQFxBlcAdAJTACkBes8KICAgICAgICBHZXQgdGhlIGVmZmVjdGl2ZSBsZXZlbCBmb3IgdGhpcyBsb2dnZXIuCgogICAgICAgIExvb3AgdGhyb3VnaCB0aGlzIGxvZ2dlciBhbmQgaXRzIHBhcmVudHMgaW4gdGhlIGxvZ2dlciBoaWVyYXJjaHksCiAgICAgICAgbG9va2luZyBmb3IgYSBub24temVybyBsb2dnaW5nIGxldmVsLiBSZXR1cm4gdGhlIGZpcnN0IG9uZSBmb3VuZC4KICAgICAgICApA3I1AAAAcgwBAAByEQAAACkCcn0AAAByEwEAAHI3AAAAcjcAAAByOAAAANoRZ2V0RWZmZWN0aXZlTGV2ZWxABgAAcwwAAAAABwQBBgEGAQYBCgF6GExvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbGMCAAAAAAAAAAMAAAAKAAAAQwAAAHNqAAAAeQp8AGoAfAEZAFMABAB0AWsKcmQBAAEAAQB0AoMAAQB6NnwAagNqBHwBawVyPmQBBAB9AnwAagB8ATwAbhZ8AXwAoAWhAGsFBAB9AnwAagB8ATwAVwBkAnQGgwABAFgAfAJTAFgAZAJTACkDejsKICAgICAgICBJcyB0aGlzIGxvZ2dlciBlbmFibGVkIGZvciBsZXZlbCAnbGV2ZWwnPwogICAgICAgIEZOKQdyEQEAAHIhAQAAcjkAAAByBwEAAHIbAAAAcjEBAAByOgAAACkDcn0AAAByNQAAAFoKaXNfZW5hYmxlZHI3AAAAcjcAAAByOAAAAHIXAQAATgYAAHMUAAAAAAQCAQoBDgEGAQIBDAEQAxoDCAF6E0xvZ2dlci5pc0VuYWJsZWRGb3JjAgAAAAAAAAACAAAABAAAAEMAAABzJgAAAHwAagB8AGsJchpkAaABfABqAnwBZgKhAX0BfABqA6AEfAGhAVMAKQJhYgEAAAogICAgICAgIEdldCBhIGxvZ2dlciB3aGljaCBpcyBhIGRlc2NlbmRhbnQgdG8gdGhpcyBvbmUuCgogICAgICAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QsIHN1Y2ggdGhhdAoKICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignYWJjJykuZ2V0Q2hpbGQoJ2RlZi5naGknKQoKICAgICAgICBpcyB0aGUgc2FtZSBhcwoKICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZi5naGknKQoKICAgICAgICBJdCdzIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIHdoZW4gdGhlIHBhcmVudCBsb2dnZXIgaXMgbmFtZWQgdXNpbmcKICAgICAgICBfX25hbWVfXyByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLgogICAgICAgIHLCAAAAKQVyAgEAAHKiAAAAcl8AAAByBwEAAHIgAAAAKQJyfQAAANoGc3VmZml4cjcAAAByNwAAAHI4AAAA2ghnZXRDaGlsZGEGAABzBgAAAAAPCgEQAXoPTG9nZ2VyLmdldENoaWxkYwEAAAAAAAAAAgAAAAQAAABDAAAAcyAAAAB0AHwAoAGhAIMBfQFkAXwAagJqA3wAagR8AWYDFgBTACkCTnoMPCVzICVzICglcyk+KQVyHwAAAHIxAQAAcuoAAAByhQAAAHJfAAAAKQJyfQAAAHI1AAAAcjcAAAByNwAAAHI4AAAAcokAAAB0BgAAcwQAAAAAAQwBeg9Mb2dnZXIuX19yZXByX19jAQAAAAAAAAACAAAAAwAAAEMAAABzLAAAAHQAfABqAYMBfABrCXIgZAFkAGwCfQF8AaADZAKhAYIBdAB8AGoBZgFmAlMAKQNOcgEAAAB6GGxvZ2dlciBjYW5ub3QgYmUgcGlja2xlZCkEciAAAAByXwAAANoGcGlja2xlWg1QaWNrbGluZ0Vycm9yKQJyfQAAAHI0AQAAcjcAAAByNwAAAHI4AAAA2gpfX3JlZHVjZV9feAYAAHMIAAAAAAMOAQgBCgF6EUxvZ2dlci5fX3JlZHVjZV9fKQFGKQNOTk4pA05ORikdcoUAAAByhgAAAHKHAAAAcogAAAByEQAAAHKCAAAActkAAAByGgAAAHIiAAAAcigAAAByJwAAAHIcAAAAch0AAAByGQAAAHIeAAAAciMAAAByIAEAAHImAQAAchgBAABy3AAAAHItAQAAci4BAAByLwEAAHIrAQAAcjEBAAByFwEAAHIzAQAAcokAAAByNQEAAHI3AAAAcjcAAAByNwAAAHI4AAAAcg8AAAApBQAAczIAAAAIDgQBDA0IBwgMCAwIDAgFCAwOBggMBAIIEQofCg4KGQgKCAsICwgWCB4IDggTCBMIBGMAAAAAAAAAAAAAAAACAAAAQAAAAHMgAAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBGQFhABaBWQGUwApB9oKUm9vdExvZ2dlcnqqCiAgICBBIHJvb3QgbG9nZ2VyIGlzIG5vdCB0aGF0IGRpZmZlcmVudCB0byBhbnkgb3RoZXIgbG9nZ2VyLCBleGNlcHQgdGhhdAogICAgaXQgbXVzdCBoYXZlIGEgbG9nZ2luZyBsZXZlbCBhbmQgdGhlcmUgaXMgb25seSBvbmUgaW5zdGFuY2Ugb2YgaXQgaW4KICAgIHRoZSBoaWVyYXJjaHkuCiAgICBjAgAAAAAAAAACAAAABQAAAEMAAABzEgAAAHQAoAF8AGQBfAGhAwEAZAJTACkDej0KICAgICAgICBJbml0aWFsaXplIHRoZSBsb2dnZXIgd2l0aCB0aGUgbmFtZSAicm9vdCIuCiAgICAgICAgcgIBAABOKQJyDwAAAHKCAAAAKQJyfQAAAHI1AAAAcjcAAAByNwAAAHI4AAAAcoIAAACHBgAAcwIAAAAABHoTUm9vdExvZ2dlci5fX2luaXRfX2MBAAAAAAAAAAEAAAACAAAAQwAAAHMIAAAAdABkAWYCUwApAk5yNwAAACkBciAAAAApAXJ9AAAAcjcAAAByNwAAAHI4AAAAcjUBAACNBgAAcwIAAAAAAXoVUm9vdExvZ2dlci5fX3JlZHVjZV9fTikGcoUAAAByhgAAAHKHAAAAcogAAAByggAAAHI1AQAAcjcAAAByNwAAAHI3AAAAcjgAAAByNgEAAIEGAABzBgAAAAgFBAEIBnI2AQAAYwAAAAAAAAAAAAAAAAMAAABAAAAAc74AAABlAFoBZABaAmQBWgNkAmQDhABaBGQEZAWEAFoFZAZkB4QAWgZkCGQJhABaB2QKZAuEAFoIZAxkDYQAWglkDmQPhABaCmQQZBGcAWQSZBOEAloLZBRkFYQAWgxkFmQXhABaDWQYZBmEAFoOZBpkG4QAWg9kHGQdhABaEGQeZB+EAFoRZCtkImQjhAFaEmUTZCRkJYQAgwFaFGUUahVkJmQlhACDAVoUZRNkJ2QohACDAVoWZClkKoQAWhdkIFMAKSxyEAAAAHpvCiAgICBBbiBhZGFwdGVyIGZvciBsb2dnZXJzIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byBzcGVjaWZ5IGNvbnRleHR1YWwKICAgIGluZm9ybWF0aW9uIGluIGxvZ2dpbmcgb3V0cHV0LgogICAgYwMAAAAAAAAAAwAAAAIAAABDAAAAcxAAAAB8AXwAXwB8AnwAXwFkAVMAKQJheAEAAAogICAgICAgIEluaXRpYWxpemUgdGhlIGFkYXB0ZXIgd2l0aCBhIGxvZ2dlciBhbmQgYSBkaWN0LWxpa2Ugb2JqZWN0IHdoaWNoCiAgICAgICAgcHJvdmlkZXMgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4gVGhpcyBjb25zdHJ1Y3RvciBzaWduYXR1cmUgYWxsb3dzCiAgICAgICAgZWFzeSBzdGFja2luZyBvZiBMb2dnZXJBZGFwdGVycywgaWYgc28gZGVzaXJlZC4KCiAgICAgICAgWW91IGNhbiBlZmZlY3RpdmVseSBwYXNzIGtleXdvcmQgYXJndW1lbnRzIGFzIHNob3duIGluIHRoZQogICAgICAgIGZvbGxvd2luZyBleGFtcGxlOgoKICAgICAgICBhZGFwdGVyID0gTG9nZ2VyQWRhcHRlcihzb21lTG9nZ2VyLCBkaWN0KHAxPXYxLCBwMj0idjIiKSkKICAgICAgICBOKQJyEwEAAHIkAQAAKQNyfQAAAHITAQAAciQBAAByNwAAAHI3AAAAcjgAAAByggAAAJgGAABzBAAAAAALBgF6FkxvZ2dlckFkYXB0ZXIuX19pbml0X19jAwAAAAAAAAADAAAAAwAAAEMAAABzEgAAAHwAagB8AmQBPAB8AXwCZgJTACkCYaIBAAAKICAgICAgICBQcm9jZXNzIHRoZSBsb2dnaW5nIG1lc3NhZ2UgYW5kIGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCBpbiB0bwogICAgICAgIGEgbG9nZ2luZyBjYWxsIHRvIGluc2VydCBjb250ZXh0dWFsIGluZm9ybWF0aW9uLiBZb3UgY2FuIGVpdGhlcgogICAgICAgIG1hbmlwdWxhdGUgdGhlIG1lc3NhZ2UgaXRzZWxmLCB0aGUga2V5d29yZCBhcmdzIG9yIGJvdGguIFJldHVybgogICAgICAgIHRoZSBtZXNzYWdlIGFuZCBrd2FyZ3MgbW9kaWZpZWQgKG9yIG5vdCkgdG8gc3VpdCB5b3VyIG5lZWRzLgoKICAgICAgICBOb3JtYWxseSwgeW91J2xsIG9ubHkgbmVlZCB0byBvdmVycmlkZSB0aGlzIG9uZSBtZXRob2QgaW4gYQogICAgICAgIExvZ2dlckFkYXB0ZXIgc3ViY2xhc3MgZm9yIHlvdXIgc3BlY2lmaWMgbmVlZHMuCiAgICAgICAgciQBAAApAXIkAQAAKQNyfQAAAHJgAAAAcoAAAAByNwAAAHI3AAAAcjgAAAByfAAAAKYGAABzBAAAAAAKCgF6FUxvZ2dlckFkYXB0ZXIucHJvY2Vzc2MCAAAAAAAAAAQAAAADAAAATwAAAHMYAAAAfABqAHQBfAFmAnwCngJ8A44BAQBkAVMAKQJ6QQogICAgICAgIERlbGVnYXRlIGEgZGVidWcgY2FsbCB0byB0aGUgdW5kZXJseWluZyBsb2dnZXIuCiAgICAgICAgTikCciMAAAByBgAAACkEcn0AAAByYAAAAHJlAAAAcoAAAAByNwAAAHI3AAAAcjgAAAByGgAAALYGAABzAgAAAAAEehNMb2dnZXJBZGFwdGVyLmRlYnVnYwIAAAAAAAAABAAAAAMAAABPAAAAcxgAAAB8AGoAdAF8AWYCfAKeAnwDjgEBAGQBUwApAnpBCiAgICAgICAgRGVsZWdhdGUgYW4gaW5mbyBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlci4KICAgICAgICBOKQJyIwAAAHINAAAAKQRyfQAAAHJgAAAAcmUAAABygAAAAHI3AAAAcjcAAAByOAAAAHIiAAAAvAYAAHMCAAAAAAR6EkxvZ2dlckFkYXB0ZXIuaW5mb2MCAAAAAAAAAAQAAAADAAAATwAAAHMYAAAAfABqAHQBfAFmAnwCngJ8A44BAQBkAVMAKQJ6QwogICAgICAgIERlbGVnYXRlIGEgd2FybmluZyBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlci4KICAgICAgICBOKQJyIwAAAHIVAAAAKQRyfQAAAHJgAAAAcmUAAABygAAAAHI3AAAAcjcAAAByOAAAAHIoAAAAwgYAAHMCAAAAAAR6FUxvZ2dlckFkYXB0ZXIud2FybmluZ2MCAAAAAAAAAAQAAAAFAAAATwAAAHMkAAAAdACgAWQBdAJkAqEDAQB8AGoDfAFmAXwCngJ8A44BAQBkAFMAKQNOejZUaGUgJ3dhcm4nIG1ldGhvZCBpcyBkZXByZWNhdGVkLCB1c2UgJ3dhcm5pbmcnIGluc3RlYWRyQAAAACkEchkBAAByJwAAAHIaAQAAcigAAAApBHJ9AAAAcmAAAAByZQAAAHKAAAAAcjcAAAByNwAAAHI4AAAAcicAAADIBgAAcwYAAAAAAQYBCAF6EkxvZ2dlckFkYXB0ZXIud2FybmMCAAAAAAAAAAQAAAADAAAATwAAAHMYAAAAfABqAHQBfAFmAnwCngJ8A44BAQBkAVMAKQJ6QgogICAgICAgIERlbGVnYXRlIGFuIGVycm9yIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyLgogICAgICAgIE4pAnIjAAAAcgcAAAApBHJ9AAAAcmAAAAByZQAAAHKAAAAAcjcAAAByNwAAAHI4AAAAchwAAADNBgAAcwIAAAAABHoTTG9nZ2VyQWRhcHRlci5lcnJvclQpAXJCAAAAYwIAAAABAAAABQAAAAQAAABPAAAAcyAAAAB8AGoAdAF8AWYCfAOeAmQBfAJpAXwElwKOAQEAZAJTACkDekYKICAgICAgICBEZWxlZ2F0ZSBhbiBleGNlcHRpb24gY2FsbCB0byB0aGUgdW5kZXJseWluZyBsb2dnZXIuCiAgICAgICAgckIAAABOKQJyIwAAAHIHAAAAKQVyfQAAAHJgAAAAckIAAAByZQAAAHKAAAAAcjcAAAByNwAAAHI4AAAAch0AAADTBgAAcwIAAAAABHoXTG9nZ2VyQWRhcHRlci5leGNlcHRpb25jAgAAAAAAAAAEAAAAAwAAAE8AAABzGAAAAHwAagB0AXwBZgJ8Ap4CfAOOAQEAZAFTACkCekQKICAgICAgICBEZWxlZ2F0ZSBhIGNyaXRpY2FsIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyLgogICAgICAgIE4pAnIjAAAAcgUAAAApBHJ9AAAAcmAAAAByZQAAAHKAAAAAcjcAAAByNwAAAHI4AAAAchkAAADZBgAAcwIAAAAABHoWTG9nZ2VyQWRhcHRlci5jcml0aWNhbGMDAAAAAAAAAAUAAAAEAAAATwAAAHM0AAAAfACgAHwBoQFyMHwAoAF8AnwEoQJcAn0CfQR8AGoCagN8AXwCZgJ8A54CfASOAQEAZAFTACkCeocKICAgICAgICBEZWxlZ2F0ZSBhIGxvZyBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlciwgYWZ0ZXIgYWRkaW5nCiAgICAgICAgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBmcm9tIHRoaXMgYWRhcHRlciBpbnN0YW5jZS4KICAgICAgICBOKQRyFwEAAHJ8AAAAchMBAAByIwAAACkFcn0AAAByNQAAAHJgAAAAcmUAAABygAAAAHI3AAAAcjcAAAByOAAAAHIjAAAA3wYAAHMGAAAAAAUKARABehFMb2dnZXJBZGFwdGVyLmxvZ2MCAAAAAAAAAAIAAAADAAAAQwAAAHMMAAAAfABqAKABfAGhAVMAKQF6OwogICAgICAgIElzIHRoaXMgbG9nZ2VyIGVuYWJsZWQgZm9yIGxldmVsICdsZXZlbCc/CiAgICAgICAgKQJyEwEAAHIXAQAAKQJyfQAAAHI1AAAAcjcAAAByNwAAAHI4AAAAchcBAADoBgAAcwIAAAAABHoaTG9nZ2VyQWRhcHRlci5pc0VuYWJsZWRGb3JjAgAAAAAAAAACAAAAAwAAAEMAAABzEAAAAHwAagCgAXwBoQEBAGQBUwApAnpDCiAgICAgICAgU2V0IHRoZSBzcGVjaWZpZWQgbGV2ZWwgb24gdGhlIHVuZGVybHlpbmcgbG9nZ2VyLgogICAgICAgIE4pAnITAQAActkAAAApAnJ9AAAAcjUAAAByNwAAAHI3AAAAcjgAAABy2QAAAO4GAABzAgAAAAAEehZMb2dnZXJBZGFwdGVyLnNldExldmVsYwEAAAAAAAAAAQAAAAIAAABDAAAAcwoAAAB8AGoAoAGhAFMAKQF6RAogICAgICAgIEdldCB0aGUgZWZmZWN0aXZlIGxldmVsIGZvciB0aGUgdW5kZXJseWluZyBsb2dnZXIuCiAgICAgICAgKQJyEwEAAHIxAQAAKQFyfQAAAHI3AAAAcjcAAAByOAAAAHIxAQAA9AYAAHMCAAAAAAR6H0xvZ2dlckFkYXB0ZXIuZ2V0RWZmZWN0aXZlTGV2ZWxjAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAHwAagCgAaEAUwApAXpACiAgICAgICAgU2VlIGlmIHRoZSB1bmRlcmx5aW5nIGxvZ2dlciBoYXMgYW55IGhhbmRsZXJzLgogICAgICAgICkCchMBAAByLwEAACkBcn0AAAByNwAAAHI3AAAAcjgAAAByLwEAAPoGAABzAgAAAAAEehlMb2dnZXJBZGFwdGVyLmhhc0hhbmRsZXJzTkZjBwAAAAAAAAAHAAAACAAAAEMAAABzGAAAAHwAagBqAXwBfAJ8A3wEfAV8BmQBjQZTACkCelgKICAgICAgICBMb3ctbGV2ZWwgbG9nIGltcGxlbWVudGF0aW9uLCBwcm94aWVkIHRvIGFsbG93IG5lc3RlZCBsb2dnZXIgYWRhcHRlcnMuCiAgICAgICAgKQNyQgAAAHIkAQAAcnAAAAApAnITAQAAchgBAAApB3J9AAAAcjUAAAByYAAAAHJlAAAAckIAAAByJAEAAHJwAAAAcjcAAAByNwAAAHI4AAAAchgBAAAABwAAcw4AAAAABAYBAgECAQIBAgECAXoSTG9nZ2VyQWRhcHRlci5fbG9nYwEAAAAAAAAAAQAAAAEAAABDAAAAcwgAAAB8AGoAagFTACkBTikCchMBAAByBwEAACkBcn0AAAByNwAAAHI3AAAAcjgAAAByBwEAAA0HAABzAgAAAAACehVMb2dnZXJBZGFwdGVyLm1hbmFnZXJjAgAAAAAAAAACAAAAAgAAAEMAAABzDAAAAHwBfABqAF8BZABTACkBTikCchMBAAByBwEAACkCcn0AAADaBXZhbHVlcjcAAAByNwAAAHI4AAAAcgcBAAARBwAAcwIAAAAAAmMBAAAAAAAAAAEAAAABAAAAQwAAAHMIAAAAfABqAGoBUwApAU4pAnITAQAAcl8AAAApAXJ9AAAAcjcAAAByNwAAAHI4AAAAcl8AAAAVBwAAcwIAAAAAAnoSTG9nZ2VyQWRhcHRlci5uYW1lYwEAAAAAAAAAAwAAAAQAAABDAAAAcyYAAAB8AGoAfQF0AXwBoAKhAIMBfQJkAXwAagNqBHwBagV8AmYDFgBTACkCTnoMPCVzICVzICglcyk+KQZyEwEAAHIfAAAAcjEBAABy6gAAAHKFAAAAcl8AAAApA3J9AAAAchMBAAByNQAAAHI3AAAAcjcAAAByOAAAAHKJAAAAGQcAAHMGAAAAAAEGAQwBehZMb2dnZXJBZGFwdGVyLl9fcmVwcl9fKQNOTkYpGHKFAAAAcoYAAAByhwAAAHKIAAAAcoIAAAByfAAAAHIaAAAAciIAAAByKAAAAHInAAAAchwAAAByHQAAAHIZAAAAciMAAAByFwEAAHLZAAAAcjEBAAByLwEAAHIYAQAAcusAAAByBwEAANoGc2V0dGVycl8AAAByiQAAAHI3AAAAcjcAAAByNwAAAHI4AAAAchAAAACSBgAAcygAAAAIBAQCCA4IEAgGCAYIBggFCAYOBggGCAkIBggGCAYIBgoNDAQOBAwEYwAAAAAAAAAADAAAAAcAAABLAAAAc4ABAAB0AIMAAQCQAXpqdAF0AmoDgwFkAWsCkAFycHwAoARkAmQDoQJ9AXwBZANrCHJIZAR8AGsGcmBkBXwAawZyYHQFZAaDAYIBbhhkBHwAawZzWGQFfABrBnJgdAVkB4MBggF8AWQDawhyqnwAoARkBWQDoQJ9AnwAoARkCGQJoQJ9A3wCcpB0BnwCfAODAn0EbhR8AKAEZARkA6ECfQV0B3wFgwF9BHwEZwF9AXwAoARkCmQDoQJ9BnwAoARkC2QMoQJ9B3wHdAhrB3LgdAVkDWQOoAl0CKAKoQChARYAgwGCAXwAoARkD3QIfAcZAGQQGQChAn0IdAt8CHwGfAeDA30JeC58AUQAXSZ9BHwEagxkA2sIkAFyIHwEoA18CaEBAQB0AqAOfAShAQEAkAFxBlcAfACgBGQRZAOhAn0KfApkA2sJkAFyUHQCoA98CqEBAQB8AJABcnBkEqAJfACgCqEAoQF9C3QFZBN8CxYAgwGCAVcAZAN0EIMAAQBYAGQDUwApFGG1CQAACiAgICBEbyBiYXNpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgbG9nZ2luZyBzeXN0ZW0uCgogICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgaWYgdGhlIHJvb3QgbG9nZ2VyIGFscmVhZHkgaGFzIGhhbmRsZXJzCiAgICBjb25maWd1cmVkLiBJdCBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCBpbnRlbmRlZCBmb3IgdXNlIGJ5IHNpbXBsZSBzY3JpcHRzCiAgICB0byBkbyBvbmUtc2hvdCBjb25maWd1cmF0aW9uIG9mIHRoZSBsb2dnaW5nIHBhY2thZ2UuCgogICAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGNyZWF0ZSBhIFN0cmVhbUhhbmRsZXIgd2hpY2ggd3JpdGVzIHRvCiAgICBzeXMuc3RkZXJyLCBzZXQgYSBmb3JtYXR0ZXIgdXNpbmcgdGhlIEJBU0lDX0ZPUk1BVCBmb3JtYXQgc3RyaW5nLCBhbmQKICAgIGFkZCB0aGUgaGFuZGxlciB0byB0aGUgcm9vdCBsb2dnZXIuCgogICAgQSBudW1iZXIgb2Ygb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgbWF5IGJlIHNwZWNpZmllZCwgd2hpY2ggY2FuIGFsdGVyCiAgICB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCgogICAgZmlsZW5hbWUgIFNwZWNpZmllcyB0aGF0IGEgRmlsZUhhbmRsZXIgYmUgY3JlYXRlZCwgdXNpbmcgdGhlIHNwZWNpZmllZAogICAgICAgICAgICAgIGZpbGVuYW1lLCByYXRoZXIgdGhhbiBhIFN0cmVhbUhhbmRsZXIuCiAgICBmaWxlbW9kZSAgU3BlY2lmaWVzIHRoZSBtb2RlIHRvIG9wZW4gdGhlIGZpbGUsIGlmIGZpbGVuYW1lIGlzIHNwZWNpZmllZAogICAgICAgICAgICAgIChpZiBmaWxlbW9kZSBpcyB1bnNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gJ2EnKS4KICAgIGZvcm1hdCAgICBVc2UgdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nIGZvciB0aGUgaGFuZGxlci4KICAgIGRhdGVmbXQgICBVc2UgdGhlIHNwZWNpZmllZCBkYXRlL3RpbWUgZm9ybWF0LgogICAgc3R5bGUgICAgIElmIGEgZm9ybWF0IHN0cmluZyBpcyBzcGVjaWZpZWQsIHVzZSB0aGlzIHRvIHNwZWNpZnkgdGhlCiAgICAgICAgICAgICAgdHlwZSBvZiBmb3JtYXQgc3RyaW5nIChwb3NzaWJsZSB2YWx1ZXMgJyUnLCAneycsICckJywgZm9yCiAgICAgICAgICAgICAgJS1mb3JtYXR0aW5nLCA6bWV0aDpgc3RyLmZvcm1hdGAgYW5kIDpjbGFzczpgc3RyaW5nLlRlbXBsYXRlYAogICAgICAgICAgICAgIC0gZGVmYXVsdHMgdG8gJyUnKS4KICAgIGxldmVsICAgICBTZXQgdGhlIHJvb3QgbG9nZ2VyIGxldmVsIHRvIHRoZSBzcGVjaWZpZWQgbGV2ZWwuCiAgICBzdHJlYW0gICAgVXNlIHRoZSBzcGVjaWZpZWQgc3RyZWFtIHRvIGluaXRpYWxpemUgdGhlIFN0cmVhbUhhbmRsZXIuIE5vdGUKICAgICAgICAgICAgICB0aGF0IHRoaXMgYXJndW1lbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggJ2ZpbGVuYW1lJyAtIGlmIGJvdGgKICAgICAgICAgICAgICBhcmUgcHJlc2VudCwgJ3N0cmVhbScgaXMgaWdub3JlZC4KICAgIGhhbmRsZXJzICBJZiBzcGVjaWZpZWQsIHRoaXMgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIGFscmVhZHkgY3JlYXRlZAogICAgICAgICAgICAgIGhhbmRsZXJzLCB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSByb290IGhhbmRsZXIuIEFueSBoYW5kbGVyCiAgICAgICAgICAgICAgaW4gdGhlIGxpc3Qgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIGZvcm1hdHRlciBhc3NpZ25lZCB3aWxsIGJlCiAgICAgICAgICAgICAgYXNzaWduZWQgdGhlIGZvcm1hdHRlciBjcmVhdGVkIGluIHRoaXMgZnVuY3Rpb24uCgogICAgTm90ZSB0aGF0IHlvdSBjb3VsZCBzcGVjaWZ5IGEgc3RyZWFtIGNyZWF0ZWQgdXNpbmcgb3BlbihmaWxlbmFtZSwgbW9kZSkKICAgIHJhdGhlciB0aGFuIHBhc3NpbmcgdGhlIGZpbGVuYW1lIGFuZCBtb2RlIGluLiBIb3dldmVyLCBpdCBzaG91bGQgYmUKICAgIHJlbWVtYmVyZWQgdGhhdCBTdHJlYW1IYW5kbGVyIGRvZXMgbm90IGNsb3NlIGl0cyBzdHJlYW0gKHNpbmNlIGl0IG1heSBiZQogICAgdXNpbmcgc3lzLnN0ZG91dCBvciBzeXMuc3RkZXJyKSwgd2hlcmVhcyBGaWxlSGFuZGxlciBjbG9zZXMgaXRzIHN0cmVhbQogICAgd2hlbiB0aGUgaGFuZGxlciBpcyBjbG9zZWQuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFkZGVkIHRoZSBgYHN0eWxlYGAgcGFyYW1ldGVyLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBBZGRlZCB0aGUgYGBoYW5kbGVyc2BgIHBhcmFtZXRlci4gQSBgYFZhbHVlRXJyb3JgYCBpcyBub3cgdGhyb3duIGZvcgogICAgICAgaW5jb21wYXRpYmxlIGFyZ3VtZW50cyAoZS5nLiBgYGhhbmRsZXJzYGAgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGgKICAgICAgIGBgZmlsZW5hbWVgYC9gYGZpbGVtb2RlYGAsIG9yIGBgZmlsZW5hbWVgYC9gYGZpbGVtb2RlYGAgc3BlY2lmaWVkCiAgICAgICB0b2dldGhlciB3aXRoIGBgc3RyZWFtYGAsIG9yIGBgaGFuZGxlcnNgYCBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aAogICAgICAgYGBzdHJlYW1gYC4KICAgIHIBAAAAcs0AAABOcuwAAAByawAAAHo4J3N0cmVhbScgYW5kICdmaWxlbmFtZScgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXJ6RydzdHJlYW0nIG9yICdmaWxlbmFtZScgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCAnaGFuZGxlcnMn2ghmaWxlbW9kZXLxAAAAcqUAAABypgAAAHKdAAAAehhTdHlsZSBtdXN0IGJlIG9uZSBvZjogJXNyoAAAAHKYAAAAclwAAAByNQAAAHoCLCB6HFVucmVjb2duaXNlZCBhcmd1bWVudChzKTogJXMpEXI5AAAAcmEAAAByAgEAAHLNAAAA2gNwb3BySQAAAHIJ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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 9
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
config.cpython-37.opt-1.pyc
22.48 KB
lrw-r--r--
2024-04-17 17:36:14
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
config.cpython-37.opt-2.pyc
18.46 KB
lrw-r--r--
2024-04-17 17:35:54
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
config.cpython-37.pyc
22.53 KB
lrw-r--r--
2024-04-17 17:36:19
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-37.opt-1.pyc
42.02 KB
lrw-r--r--
2024-04-17 17:36:14
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-37.opt-2.pyc
23.64 KB
lrw-r--r--
2024-04-17 17:35:54
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
handlers.cpython-37.pyc
42.02 KB
lrw-r--r--
2024-04-17 17:36:19
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.opt-1.pyc
60.92 KB
lrw-r--r--
2024-04-17 17:36:14
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.opt-2.pyc
33.43 KB
lrw-r--r--
2024-04-17 17:35:54
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
60.95 KB
lrw-r--r--
2024-04-17 17:36:19
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).