REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 61.93 KB
Close
//opt/alt/python37/lib64/python3.7/site-packages/psutil/__pycache__/__init__.cpython-37.pyc
Text
Base64
Qg0NCgAAAACMPd1f3VIBAOMAAAAAAAAAAAAAAABHAAAAQAAAAHP+CAAAZABaAGQBZAJsAW0CWgIBAGQBZANsA1oDZAFkA2wEWgRkAWQDbAVaBWQBZANsBloGZAFkA2wHWgdkAWQDbAhaCGQBZANsCVoJZAFkA2wKWgpkAWQDbAtaC2QBZANsDFoMeQxkAWQDbA1aDVcAbhgEAGUOawpyhAEAAQABAGQDWg1ZAG4CWABkBGQFbA9tEFoQAQBkBGQGbBBtEVoRAQBkBGQHbBBtEloSAQBkBGQIbBBtE1oTAQBkBGQJbBBtFFoUAQBkBGQKbBBtFVoVAQBkBGQLbBBtFloXAQBkBGQMbBBtGFoYAQBkBGQNbBltGloaAQBkBGQObBltG1obAQBkBGQPbBltHFocAQBkBGQQbBltHVoeAQBkBGQRbBBtH1ofAQBkBGQSbBBtIFogAQBkBGQTbBBtIVohAQBkBGQUbBBtIloiAQBkBGQVbBBtI1ojAQBkBGQWbBBtJFokAQBkBGQXbBBtJVolAQBkBGQYbBBtJlomAQBkBGQZbBBtJ1onAQBkBGQabBBtKFooAQBkBGQbbBBtKVopAQBkBGQcbBBtKloqAQBkBGQdbBBtK1orAQBkBGQebBBtLFosAQBkBGQfbBBtLVotAQBkBGQgbBBtLlouAQBkBGQhbBBtL1ovAQBkBGQibBBtMFowAQBkBGQjbBBtMVoxAQBkBGQkbBBtMloyAQBkBGQlbBBtM1ozAQBkBGQmbBBtNFo0AQBkBGQnbBBtNVo1AQBkBGQobBBtNlo2AQBkBGQpbBBtN1o3AQBkBGQqbBBtOFo4AQBkBGQrbBBtOVo5AQBkBGQsbBBtOlo6AQBkBGQtbBBtO1o7AQBkBGQubBBtPFo8AQBkBGQvbBBtPVo9AQBkBGQwbBBtPlo+AQBkBGQxbBBtP1o/AQBkBGQybBBtQFpAAQBkBGQzbBBtQVpBAQBkBGQ0bBBtQlpCAQBkBGQ1bBBtQ1pDAQBkBGQ2bBBtRFpEAQBkBGQ3bBBtRVpFAQBkBGQ4bBBtRlpGAQBlP5ADckBkOVpHZARkOmwPbUhaSQEAZARkO2xIbUpaSgEAZARkPGxIbUtaSwEAZARkPWxIbUxaTAEAZARkPmxIbU1aTQEAkAFuFmVGkANy2GQEZD9sD21OWkkBAGQEZEBsT21QWlABAGQEZEFsT21RWlEBAGQEZEJsT21SWlIBAGQEZENsT21TWlMBAGQEZERsT21UWlQBAGQEZEVsT21VWlUBAGQEZEZsTm1WWlYBAGQEZEdsTm1XWlcBAGQEZEhsTm1YWlgBAGQEZElsTm1ZWlkBAGQEZEpsTm1aWloBAG5+ZUCQA3LsZARkS2wPbVtaSQEAbmplPZAEcgBkBGRMbA9tXFpJAQBuVmVFkARyMGQEZE1sD21dWkkBAGQEZE5sXW1eWl4BAGQEZE9sXW1fWl8BAGQ5WkduJmU8kARySGQEZFBsD21gWkkBAGQ5WkduDmVhZFFlCmpiFgCDAYIBZFJkU2RUZFVkVmRXZFhkWWRaZFtkXGRdZF5kX2RgZGFkYmRjZGJkZGRlZGZkZ2RoZGlkamRrZGxkbWRuZG9kcGRxZHJkc2R0ZHVkdmR3ZHhkeWR6ZHtkfGR9ZH5kf2SAZIFkgmSDZIRkhWSGZIdkiGSJZIpki2SMZI1kjmSPZJBkkWSSZJNklGSVZJZkl2dHWmNlY6BkZUlqZaEBAQBlZmVJamdkmIMCkAVyXmQEZJlsD21oWmgBAGVpgwBaamQDWmt4QGVsZWiDAUQAXTRaa2VroG1kmqEBkAVyImVroG6hAJAFciJlb2VoZWuDAmVqZWs8AGVjoHBla6EBAQCQBXEiVwBbaltrZUlqcVpxZJtacmScWnNldGSdZJ6EAGVzoHVkn6EBRACDAYMBWnZlb2UMZKBlDGoMgwNad2QDYXhkA2F5ZXqDAFp7ZXxlc6B9ZJ9koaECgwFlb2VJan5komQDgwNrA5AGcjpko2VvZUlqfmSkgwIWAFp/ZWZlSWp+ZKKDApAGcghlf2SlZJ+ggGSmZJ6EAGWBZUlqfmqCgwFEAIMBoQFlc2YCFgA3AFp/bgxlf2SnZXMWADcAWn9lf2SoZW9lSWp+ZKRkqYMDFgA3AFp/ZX9kqjcAWn9lDmV/gwGCAWVmZUlkq4MCkAZyTmVJaoNahG4IZKxkrYQAWoRkrmSvhABahWSwZLGEAFqGRwBksmSChABkgmV6gwNaZ2WHZLNknoQAZWxlZ4MBRACDAYMBWohHAGS0ZIOEAGSDZWeDA1qJZLVkhYQAWopktmSEhABai2kAWoxlC6CNoQBajmTnZLdkhoQBWo9k6GS4ZIeEAVqQZOlkumSNhAFakWTqZLxkioQBWpJ5CmWSgwBhk1cAbhoEAGWUawqQB3IEAQABAAEAZANhk1kAbgJYAHkOZZJkuWS9jQFhlVcAbhoEAGWUawqQB3IuAQABAAEAZANhlVkAbgJYAGS+ZL+EAFqWZMBkwYQAWpdkwmTDhABamGTrZMRki4QBWpl0k2GadJVhm2TsZMVkjIQBWpxkxmSOhABanWVmZUlkx4MCkAdyjGTtZMhkx4QBWp5lY6BwZMehAQEAZWZlB2TJgwKQB3OkZWZlSWTJgwKQB3LIZWZlB2TJgwKQB3K4ZQdqn1qfbgZlSWqfWp9lY6BwZMmhAQEAZMpkiIQAWqBky2SJhABaoWTMZJWEAFqiZO5kzWSUhAFao2TvZM5kk4QBWqRlBqClZRdqpmTPoQJlpF+mZNBlpGqmXwBk8GTRZI+EAVqnZQagpWUXaqZk0qECZadfpmTQZadqpl8AZPFk1GSQhAFaqGTVZJGEAFqpZNZkkoQAWqplZmVJZNeDApAIcmhk8mTYZNeEAVqrZWOgcGTXoQEBAGVmZUlk2YMCkAhyhmTaZNmEAFqsZWOgcGTZoQEBAGVmZUlk24MCkAhypGTcZNuEAFqtZWOgcGTboQEBAGTdZJeEAFquZN5kloQAWq9lRpAIcspk32TghABasGThZOKEAFqxZONk5IQAWrJbE1sCZQpqdmQBGQBk5WsAkAhy6luzW7RltWTmawKQCHL6ZbKDAAEAZANTACnzYTMBAABwc3V0aWwgaXMgYSBjcm9zcy1wbGF0Zm9ybSBsaWJyYXJ5IGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIG9uCnJ1bm5pbmcgcHJvY2Vzc2VzIGFuZCBzeXN0ZW0gdXRpbGl6YXRpb24gKENQVSwgbWVtb3J5LCBkaXNrcywgbmV0d29yaywKc2Vuc29ycykgaW4gUHl0aG9uLiBTdXBwb3J0ZWQgcGxhdGZvcm1zOgoKIC0gTGludXgKIC0gV2luZG93cwogLSBtYWNPUwogLSBGcmVlQlNECiAtIE9wZW5CU0QKIC0gTmV0QlNECiAtIFN1biBTb2xhcmlzCiAtIEFJWAoKV29ya3Mgd2l0aCBQeXRob24gdmVyc2lvbnMgZnJvbSAyLjYgdG8gMy40Ky4K6QAAAAApAdoIZGl2aXNpb25O6QEAAAApAdoHX2NvbW1vbikB2gxBY2Nlc3NEZW5pZWQpAdoFRXJyb3IpAdoWbWVtb2l6ZV93aGVuX2FjdGl2YXRlZCkB2g1Ob1N1Y2hQcm9jZXNzKQHaDlRpbWVvdXRFeHBpcmVkKQHaDHdyYXBfbnVtYmVycykB2g1ab21iaWVQcm9jZXNzKQHaBGxvbmcpAdoPUGVybWlzc2lvbkVycm9yKQHaElByb2Nlc3NMb29rdXBFcnJvcikB2gNQWTMpAdoKQ09OTl9DTE9TRSkB2g9DT05OX0NMT1NFX1dBSVQpAdoMQ09OTl9DTE9TSU5HKQHaEENPTk5fRVNUQUJMSVNIRUQpAdoOQ09OTl9GSU5fV0FJVDEpAdoOQ09OTl9GSU5fV0FJVDIpAdoNQ09OTl9MQVNUX0FDSykB2gtDT05OX0xJU1RFTikB2glDT05OX05PTkUpAdoNQ09OTl9TWU5fUkVDVikB2g1DT05OX1NZTl9TRU5UKQHaDkNPTk5fVElNRV9XQUlUKQHaD05JQ19EVVBMRVhfRlVMTCkB2g9OSUNfRFVQTEVYX0hBTEYpAdoSTklDX0RVUExFWF9VTktOT1dOKQHaElBPV0VSX1RJTUVfVU5LTk9XTikB2hRQT1dFUl9USU1FX1VOTElNSVRFRCkB2gtTVEFUVVNfREVBRCkB2hFTVEFUVVNfRElTS19TTEVFUCkB2gtTVEFUVVNfSURMRSkB2g1TVEFUVVNfTE9DS0VEKQHaDVNUQVRVU19QQVJLRUQpAdoOU1RBVFVTX1JVTk5JTkcpAdoPU1RBVFVTX1NMRUVQSU5HKQHaDlNUQVRVU19TVE9QUEVEKQHaE1NUQVRVU19UUkFDSU5HX1NUT1ApAdoOU1RBVFVTX1dBSVRJTkcpAdoNU1RBVFVTX1dBS0lORykB2g1TVEFUVVNfWk9NQklFKQHaA0FJWCkB2gNCU0QpAdoHRlJFRUJTRCkB2gVMSU5VWCkB2gVNQUNPUykB2gZORVRCU0QpAdoHT1BFTkJTRCkB2gNPU1gpAdoFUE9TSVgpAdoFU1VOT1MpAdoHV0lORE9XU3oFL3Byb2MpAdoIX3BzbGludXgpAdoPSU9QUklPX0NMQVNTX0JFKQHaEUlPUFJJT19DTEFTU19JRExFKQHaEUlPUFJJT19DTEFTU19OT05FKQHaD0lPUFJJT19DTEFTU19SVCkB2gpfcHN3aW5kb3dzKQHaG0FCT1ZFX05PUk1BTF9QUklPUklUWV9DTEFTUykB2htCRUxPV19OT1JNQUxfUFJJT1JJVFlfQ0xBU1MpAdoTSElHSF9QUklPUklUWV9DTEFTUykB2hNJRExFX1BSSU9SSVRZX0NMQVNTKQHaFU5PUk1BTF9QUklPUklUWV9DTEFTUykB2hdSRUFMVElNRV9QUklPUklUWV9DTEFTUykB2g9DT05OX0RFTEVURV9UQ0IpAdoOSU9QUklPX1ZFUllMT1cpAdoKSU9QUklPX0xPVykB2g1JT1BSSU9fTk9STUFMKQHaC0lPUFJJT19ISUdIKQHaBl9wc29zeCkB2gZfcHNic2QpAdoIX3Bzc3Vub3MpAdoKQ09OTl9CT1VORCkB2glDT05OX0lETEUpAdoGX3BzYWl4ehxwbGF0Zm9ybSAlcyBpcyBub3Qgc3VwcG9ydGVkcgYAAAByCAAAAHILAAAAcgUAAAByCQAAANoMdmVyc2lvbl9pbmZv2gtfX3ZlcnNpb25fX3ImAAAAciMAAAByJwAAAHIiAAAAcigAAAByKQAAAHIsAAAAciEAAAByKwAAAHIkAAAAcioAAAByJQAAAHITAAAAchoAAAByGQAAAHIUAAAAchUAAAByGwAAAHIQAAAAchEAAAByFgAAAHIXAAAAchIAAAByGAAAANoHQUZfTElOS3IcAAAAch0AAAByHgAAAHIfAAAAciAAAAByLgAAAHIvAAAAcjAAAAByMgAAAHIzAAAAcjEAAAByNAAAAHI1AAAAcjYAAAByNwAAAHItAAAA2gdQcm9jZXNz2gVQb3BlbtoKcGlkX2V4aXN0c9oEcGlkc9oMcHJvY2Vzc19pdGVy2gp3YWl0X3Byb2Nz2g52aXJ0dWFsX21lbW9yedoLc3dhcF9tZW1vcnnaCWNwdV90aW1lc9oLY3B1X3BlcmNlbnTaEWNwdV90aW1lc19wZXJjZW502gljcHVfY291bnTaCWNwdV9zdGF0c9oPbmV0X2lvX2NvdW50ZXJz2g9uZXRfY29ubmVjdGlvbnPaDG5ldF9pZl9hZGRyc9oMbmV0X2lmX3N0YXRz2hBkaXNrX2lvX2NvdW50ZXJz2g9kaXNrX3BhcnRpdGlvbnPaCmRpc2tfdXNhZ2XaBXVzZXJz2glib290X3RpbWXaBnJsaW1pdCkB2g1f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DmQPhABaCmULZBBkEYQAgwFaDGUNag5kEmQThACDAVoPZHtkFGQVhAFaEGQWZBeEAFoRZBhkGYQAWhJkGmQbhABaE2UUZBxkHYQAgwFaFWQeZB+EAFoWZCBkIYQAWhdkImQjhABaGGQkZCWEAFoZZCZkJ4QAWhpkKGQphABaG2QqZCuEAFocZHxkLGQthAFaHWUekABy+GUUZC5kL4QAgwFaH2QwZDGEAFogZDJkM4QAWiFkNGQ1hABaImUjZSRqJWQ2gwKQAXIOZDdkOIQAWiZlI2UkaiVkOYMCkAFyJmR9ZDpkO4QBWidlI2UkaiVkPIMCkAFyPmR+ZD1kPoQBWihlI2UkaiVkP4MCkAFyVmR/ZEBkQYQBWillI2UkaiVkQoMCkAFybGRDZESEAFoqZSNlJGolZEWDApABcoJkRmRHhABaK2UskAFykGRIZEmEAFotZEpkS4QAWi5kTGRNhABaL2UjZSRqJWROgwKQAXK2ZE9kUIQAWjBlMWSAZFFkUoQBgwFaMmSBZFNkVIQBWjNlFGRVZFaEAIMBWjRlFGRXZFiEAIMBWjVlNmo3ZFlkWo0BZFtkXIQAgwFaOGRdZF6EAFo5ZIJkYGRhhAFaOmUjZSRqJWRigwKQAnIkZINkZGRlhAFaO2RmZGeEAFo8ZIRkaWRqhAFaPWUekAJyRGRrZGyEAFo+ZTFkbWRuhACDAVo/ZTFkb2RwhACDAVpAZTFkcWRyhACDAVpBZTFkc2R0hACDAVpCZTFkdWR2hACDAVpDZIVkd2R4hAFaRGQCUwAphnJSAAAAYScEAABSZXByZXNlbnRzIGFuIE9TIHByb2Nlc3Mgd2l0aCB0aGUgZ2l2ZW4gUElELgogICAgSWYgUElEIGlzIG9taXR0ZWQgY3VycmVudCBwcm9jZXNzIFBJRCAob3MuZ2V0cGlkKCkpIGlzIHVzZWQuCiAgICBSYWlzZSBOb1N1Y2hQcm9jZXNzIGlmIFBJRCBkb2VzIG5vdCBleGlzdC4KCiAgICBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgbWV0aG9kcyBvZiB0aGlzIGNsYXNzIGRvIG5vdCBtYWtlIHN1cmUKICAgIHRoZSBQSUQgb2YgdGhlIHByb2Nlc3MgYmVpbmcgcXVlcmllZCBoYXMgYmVlbiByZXVzZWQgb3ZlciB0aW1lLgogICAg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bnRlcnZhbCogaXMgMC4wIG9yIE5vbmUgKGRlZmF1bHQpIGNvbXBhcmVzIHByb2Nlc3MgdGltZXMKICAgICAgICB0byBzeXN0ZW0gQ1BVIHRpbWVzIGVsYXBzZWQgc2luY2UgbGFzdCBjYWxsLCByZXR1cm5pbmcKICAgICAgICBpbW1lZGlhdGVseSAobm9uLWJsb2NraW5nKS4gVGhhdCBtZWFucyB0aGF0IHRoZSBmaXJzdCB0aW1lCiAgICAgICAgdGhpcyBpcyBjYWxsZWQgaXQgd2lsbCByZXR1cm4gYSBtZWFuaW5nZnVsIDAuMCB2YWx1ZS4KCiAgICAgICAgV2hlbiAqaW50ZXJ2YWwqIGlzID4gMC4wIGNvbXBhcmVzIHByb2Nlc3MgdGltZXMgdG8gc3lzdGVtIENQVQogICAgICAgIHRpbWVzIGVsYXBzZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgaW50ZXJ2YWwgKGJsb2NraW5nKS4KCiAgICAgICAgSW4gdGhpcyBjYXNlIGlzIHJlY29tbWVuZGVkIGZvciBhY2N1cmFjeSB0aGF0IHRoaXMgZnVuY3Rpb24KICAgICAgICBiZSBjYWxsZWQgd2l0aCBhdCBsZWFzdCAwLjEgc2Vjb25kcyBiZXR3ZWVuIGNhbGxzLgoKICAgICAgICBBIHZhbHVlID4gMTAwLjAgY2FuIGJlIHJldHVybmVkIGluIGNhc2Ugb2YgcHJvY2Vzc2VzIHJ1bm5pbmcKICAgICAgICBtdWx0aXBsZSB0aHJlYWRzIG9uIGRpZmZlcmVudCBDUFUgY29yZXMuCgogICAgICAgIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBleHBsaWNpdGx5IE5PVCBzcGxpdCBldmVubHkgYmV0d2VlbgogICAgICAgIGFsbCBhdmFpbGFibGUgbG9naWNhbCBDUFVzLiBUaGlzIG1lYW5zIHRoYXQgYSBidXN5IGxvb3AgcHJvY2VzcwogICAgICAgIHJ1bm5pbmcgb24gYSBzeXN0ZW0gd2l0aCAyIGxvZ2ljYWwgQ1BVcyB3aWxsIGJlIHJlcG9ydGVkIGFzCiAgICAgICAgaGF2aW5nIDEwMCUgQ1BVIHV0aWxpemF0aW9uIGluc3RlYWQgb2YgNTAlLgoKICAgICAgICBF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Q29ubmVjdGlvbnMgdXNpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgICAgICB8IGluZXQgICAgICAgfCBJUHY0IGFuZCBJUHY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgfCBpbmV0NCAgICAgIHwgSVB2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgIHwgaW5ldDYgICAgICB8IElQdjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICB8IHRjcCAgICAgICAgfCBUQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgfCB0Y3A0ICAgICAgIHwgVENQIG92ZXIgSVB2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgIHwgdGNwNiAgICAgICB8IFRDUCBvdmVyIElQdjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICB8IHVkcCAgICAgICAgfCBVRFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgfCB1ZHA0ICAgICAgIHwgVURQIG92ZXIgSVB2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgIHwgdWRwNiAgICAgICB8IFVEUCBvdmVyIElQdjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICB8IHVuaXggICAgICAgfCBVTklYIHNvY2tldCAoYm90aCBVRFAgYW5kIFRDUCBwcm90b2NvbHMpICAgICAgICAgICB8CiAgICAgICAgfCBh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cyBleGl0IHN0YXR1cyAobWF5IGJlIE5vbmUpLgoKICAgICpjYWxsYmFjayogaXMgYSBmdW5jdGlvbiB3aGljaCBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIGEgcHJvY2VzcwogICAgdGVybWluYXRlcyAoYSBQcm9jZXNzIGluc3RhbmNlIGlzIHBhc3NlZCBhcyBjYWxsYmFjayBhcmd1bWVudCkuCgogICAgRnVuY3Rpb24gd2lsbCByZXR1cm4gYXMgc29vbiBhcyBhbGwgcHJvY2Vzc2VzIHRlcm1pbmF0ZSBvciB3aGVuCiAgICAqdGltZW91dCogb2NjdXJzLgogICAgRGlmZmVyZW50bHkgZnJvbSBQcm9jZXNzLndhaXQoKSBpdCB3aWxsIG5vdCByYWlzZSBUaW1lb3V0RXhwaXJlZCBpZgogICAgKnRpbWVvdXQqIG9jY3Vycy4KCiAgICBUeXBpY2FsIHVzZSBjYXNlIGlzOgoKICAgICAtIHNlbmQgU0lHVEVSTSB0byBhIGxpc3Qgb2YgcHJvY2Vzc2VzCiAgICAgLSBnaXZlIHRoZW0gc29tZSB0aW1lIHRvIHRlcm1pbmF0ZQogICAgIC0gc2VuZCBTSUdLSUxMIHRvIHRob3NlIG9uZXMgd2hpY2ggYXJlIHN0aWxsIGFsaXZlCgogICAgRXhhbXBsZToKCiAgICA+Pj4gZGVmIG9uX3Rlcm1pbmF0ZShwcm9jKToKICAgIC4uLiAgICAgcHJpbnQoInByb2Nlc3Mge30gdGVybWluYXRlZCIuZm9ybWF0KHByb2MpKQogICAgLi4uCiAgICA+Pj4gZm9yIHAgaW4gcHJvY3M6CiAgICAuLi4gICAgcC50ZXJtaW5hdGUoKQogICAgLi4uCiAgICA+Pj4gZ29uZSwgYWxpdmUgPSB3YWl0X3Byb2NzKHByb2NzLCB0aW1lb3V0PTMsIGNhbGxiYWNrPW9uX3Rlcm1pbmF0ZSkKICAgID4+PiBmb3IgcCBpbiBhbGl2ZToKICAgIC4uLiAgICAgcC5raWxsKCkKICAgIGMCAAAAAAAAAAMAAAAIAAAAEwAAAHNaAAAAeRB8AGoAfAFkAY0BfQJXAG4UBAB0AWsKciQBAAEAAQBZAG4yWAB8AmQAawlzNnwAoAKhAHNWfAJ8AF8DiAGgBHwA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LHwAZANrAHIsdABkBHwAFgCDAYIBZAVkBoQAfQN8AXNwfAJyTnQBgwB9BHQCoAN8AKEBAQBuEnQEfQR8BGQBawhyYHQBgwB9BHQBgwBhBHwDfAR0BIMCUwBnAH0FfAJyjnQBZAdkCI0BfQZ0AqADfAChAQEAbhZ0BX0GfAZkAWsIcqR0AWQHZAiNAX0GdAFkB2QIjQFhBXgmdAZ8BnQFgwJEAF0YXAJ9BH0HfAWgB3wDfAR8B4MCoQEBAHG6VwB8BVMAZAFTACkJYaEEAABSZXR1cm4gYSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3lzdGVtLXdpZGUgQ1BVCiAgICB1dGlsaXphdGlvbiBhcyBhIHBlcmNlbnRhZ2UuCgogICAgV2hlbiAqaW50ZXJ2YWwqIGlzID4gMC4wIGNvbXBhcmVzIHN5c3RlbSBDUFUgdGltZXMgZWxhcHNlZCBiZWZvcmUKICAgIGFuZCBhZnRlciB0aGUgaW50ZXJ2YWwgKGJsb2NraW5nKS4KCiAgICBXaGVuICppbnRlcnZhbCogaXMgMC4wIG9yIE5vbmUgY29tcGFyZXMgc3lzdGVtIENQVSB0aW1lcyBlbGFwc2VkCiAgICBzaW5jZSBsYXN0IGNhbGwgb3IgbW9kdWxlIGltcG9ydCwgcmV0dXJuaW5nIGltbWVkaWF0ZWx5IChub24KICAgIGJsb2NraW5nKS4gVGhhdCBtZWFucyB0aGUgZmlyc3QgdGltZSB0aGlzIGlzIGNhbGxlZCBpdCB3aWxsCiAgICByZXR1cm4gYSBtZWFuaW5nbGVzcyAwLjAgdmFsdWUgd2hpY2ggeW91IHNob3VsZCBpZ25vcmUuCiAgICBJbiB0aGlzIGNhc2UgaXMgcmVjb21tZW5kZWQgZm9yIGFjY3VyYWN5IHRoYXQgdGhpcyBmdW5jdGlvbiBiZQogICAgY2FsbGVkIHdpdGggYXQgbGVhc3QgMC4xIHNlY29uZHMgYmV0d2VlbiBjYWxscy4KCiAgICBXaGVuICpwZXJjcHUqIGlzIFRydWUgcmV0dXJucyBhIGxpc3Qgb2YgZmxvYXRzIHJlcHJlc2VudGluZyB0aGUKICAgIHV0aWxpemF0aW9uIGFzIGEgcGVyY2VudGFnZSBmb3IgZWFjaCBDUFUuCiAg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dW1taW5nIGRpZmZlcmVudCBtZW1vcnkgdmFsdWVzIGRlcGVuZGluZwogICAgICAgb24gdGhlIHBsYXRmb3JtIGFuZCBpdCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIHRvIG1vbml0b3IgYWN0dWFsCiAgICAgICBtZW1vcnkgdXNhZ2UgaW4gYSBjcm9zcyBwbGF0Zm9ybSBmYXNoaW9uLgoKICAgICAtIHBlcmNlbnQ6CiAgICAgICB0aGUgcGVyY2VudGFnZSB1c2FnZSBjYWxjdWxhdGVkIGFzICh0b3RhbCAtIGF2YWlsYWJsZSkgLyB0b3RhbCAqIDEwMAoKICAgICAtIHVzZWQ6CiAgICAgICAgbWVtb3J5IHVzZWQsIGNhbGN1bGF0ZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSBhbmQKICAgICAgICBkZXNpZ25lZCBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5OgogICAgICAgIG1hY09TOiBhY3RpdmUgKyB3aXJlZAogICAgICAgIEJTRDogYWN0aXZlICsgd2lyZWQgKyBjYWNoZWQKICAgICAgICBMaW51eDogdG90YWwgLSBmcmVlCgogICAgIC0gZnJlZToKICAgICAgIG1lbW9yeSBub3QgYmVpbmcgdXNlZCBhdCBhbGwgKHplcm9lZCkgdGhhdCBpcyByZWFkaWx5IGF2YWlsYWJsZTsKICAgICAgIG5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgcmVmbGVjdCB0aGUgYWN0dWFsIG1lbW9yeSBhdmFpbGFibGUKICAgICAgICh1c2UgJ2F2YWlsYWJsZScgaW5zdGVhZCkKCiAgICBQbGF0Zm9ybS1zcGVjaWZpYyBmaWVsZHM6CgogICAgIC0gYWN0aXZlIChVTklYKToKICAgICAgIG1lbW9yeSBjdXJyZW50bHkgaW4gdXNlIG9yIHZlcnkgcmVjZW50bHkgdXNlZCwgYW5kIHNvIGl0IGlzIGluIFJBTS4KCiAgICAgLSBpbmFjdGl2ZSAoVU5JWCk6CiAgICAgICBtZW1vcnkgdGhhdCBpcyBtYXJrZWQgYXMgbm90IHVzZWQuCgogICAgIC0gYnVmZmVycyAoQlNELCBMaW51eCk6CiAg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aW1lOiAoTGludXgsIEZyZWVCU0QpIHRpbWUgc3BlbnQgZG9pbmcgYWN0dWFsIEkvT3MgKGluIG1zKQogICAgIC0gcmVhZF9tZXJnZWRfY291bnQgKExpbnV4KTogbnVtYmVyIG9mIG1lcmdlZCByZWFkcwogICAgIC0gd3JpdGVfbWVyZ2VkX2NvdW50IChMaW51eCk6IG51bWJlciBvZiBtZXJnZWQgd3JpdGVzCgogICAgSWYgKnBlcmRpc2sqIGlzIFRydWUgcmV0dXJuIHRoZSBzYW1lIGluZm9ybWF0aW9uIGZvciBldmVyeQogICAgcGh5c2ljYWwgZGlzayBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbSBhcyBhIGRpY3Rpb25hcnkKICAgIHdpdGggcGFydGl0aW9uIG5hbWVzIGFzIHRoZSBrZXlzIGFuZCB0aGUgbmFtZWR0dXBsZQogICAgZGVzY3JpYmVkIGFib3ZlIGFzIHRoZSB2YWx1ZXMuCgogICAgSWYgKm5vd3JhcCogaXMgVHJ1ZSBpdCBkZXRlY3RzIGFuZCBhZGp1c3QgdGhlIG51bWJlcnMgd2hpY2ggb3ZlcmZsb3cKICAgIGFuZCB3cmFwIChyZXN0YXJ0IGZyb20gMCkgYW5kIGFkZCAib2xkIHZhbHVlIiB0byAibmV3IHZhbHVlIiBzbyB0aGF0CiAgICB0aGUgcmV0dXJuZWQgbnVtYmVycyB3aWxsIGFsd2F5cyBiZSBpbmNyZWFzaW5nIG9yIHJlbWFpbiB0aGUgc2FtZSwKICAgIGJ1dCBuZXZlciBkZWNyZWFzZS4KICAgICJkaXNrX2lvX2NvdW50ZXJzLmNhY2hlX2NsZWFyKCkiIGNhbiBiZSB1c2VkIHRvIGludmFsaWRhdGUgdGhlCiAgICBjYWNoZS4KCiAgICBPbiByZWNlbnQgV2luZG93cyB2ZXJzaW9ucyAnZGlza3BlcmYgLXknIGNvbW1hbmQgbWF5IG5lZWQgdG8gYmUKICAgIGV4ZWN1dGVkIGZpcnN0IG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIHdvbid0IGZpbmQgYW55IGRpc2suCiAgICApAdoHcGVyZGlza056F3BzdXRpbC5kaXNrX2lvX2NvdW50ZXJz2gdzZGlza2lvYwEAAAAAAAAAAgAAAAQAAABTAAAAcxQAAABnAHwAXQx9AXQAfAGDAZECcQRTAHJqAAAAKQFyZwEAACkCcmwAAABydQAAAHJqAAAAcmoAAABybgAAAHJvAAAAFggAAHMCAAAABgB6JGRpc2tfaW9fY291bnRlcnMuPGxvY2Fscz4uPGxpc3Rjb21wPikLcjAAAAByzwAAAHJ3AAAAcmMAAADaDV93cmFwX251bWJlcnNy0AAAAHIEAAAAcowBAABytgAAAHJ4AQAA2gZ2YWx1ZXMpB3KLAQAA2gZub3dyYXBygAAAANoHcmF3ZGljdHIuAQAAWgRkaXNr2gZmaWVsZHNyagAAAHJqAAAAcm4AAAByYwAAAOoHAABzGAAAAAAgEgEMAQQBDAEEAQoBDgEEARIBEAEEAnoXcHN1dGlsLmRpc2tfaW9fY291bnRlcnN6HENsZWFycyBub3dyYXAgYXJndW1lbnQgY2FjaGVjAgAAAAAAAAAFAAAABQAAAEMAAABzcgAAAHQAoAGhAH0CfAJzGHwAchRpAFMAZAFTAHwBciZ0AnwCZAKDAn0CfAByUngifAKgA6EARABdFlwCfQN9BHQEagV8BI4AfAJ8AzwAcTRXAHwCUwB0BGoFZANkBIQAdAZ8AqAHoQCOAEQAgwGOAFMAZAFTACkFYWQEAABSZXR1cm4gbmV0d29yayBJL08gc3RhdGlzdGljcyBhcyBhIG5hbWVkdHVwbGUgaW5jbHVkaW5nCiAgICB0aGUgZm9sbG93aW5nIGZpZWxkczoKCiAgICAgLSBieXRlc19zZW50OiAgIG51bWJlciBvZiBieXRlcyBzZW50CiAgICAgLSBieXRlc19yZWN2OiAgIG51bWJlciBvZiBieXRlcyByZWNlaXZlZAogICAgIC0gcGFja2V0c19zZW50OiBudW1iZXIgb2YgcGFja2V0cyBzZW50CiAgICAgLSBwYWNrZXRzX3JlY3Y6IG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkCiAgICAgLSBlcnJpbjogICAgICAgIHRvdGFsIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgcmVjZWl2aW5nCiAgICAgLSBlcnJvdXQ6ICAgICAgIHRvdGFsIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgc2VuZGluZwogICAgIC0gZHJvcGluOiAgICAgICB0b3RhbCBudW1iZXIgb2YgaW5jb21pbmcgcGFja2V0cyB3aGljaCB3ZXJlIGRyb3BwZWQKICAgICAtIGRyb3BvdXQ6ICAgICAgdG90YWwgbnVtYmVyIG9mIG91dGdvaW5nIHBhY2tldHMgd2hpY2ggd2VyZSBkcm9wcGVkCiAgICAgICAgICAgICAgICAgICAgIChhbHdheXMgMCBvbiBtYWNPUyBhbmQgQlNEKQoKICAgIElmICpwZXJuaWMqIGlzIFRydWUgcmV0dXJuIHRoZSBzYW1lIGluZm9ybWF0aW9uIGZvciBldmVyeQogICAgbmV0d29yayBpbnRlcmZhY2UgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0gYXMgYSBkaWN0aW9uYXJ5CiAgICB3aXRoIG5ldHdvcmsgaW50ZXJmYWNlIG5hbWVzIGFzIHRoZSBrZXlzIGFuZCB0aGUgbmFtZWR0dXBsZQogICAgZGVzY3JpYmVkIGFib3ZlIGFzIHRoZSB2YWx1ZXMuCgogICAgSWYgKm5vd3JhcCogaXMgVHJ1ZSBpdCBkZXRlY3RzIGFuZCBhZGp1c3QgdGhlIG51bWJlcnMgd2hpY2ggb3ZlcmZsb3cKICAgIGFuZCB3cmFwIChyZXN0YXJ0IGZyb20gMCkgYW5kIGFkZCAib2xkIHZhbHVlIiB0byAibmV3IHZhbHVlIiBzbyB0aGF0CiAgICB0aGUgcmV0dXJuZWQgbnVtYmVycyB3aWxsIGFsd2F5cyBiZSBpbmNyZWFzaW5nIG9yIHJlbWFpbiB0aGUgc2FtZSwKICAgIGJ1dCBuZXZlciBkZWNyZWFzZS4KICAgICJkaXNrX2lvX2NvdW50ZXJzLmNhY2hlX2NsZWFyKCkiIGNhbiBiZSB1c2VkIHRvIGludmFsaWRhdGUgdGhlCiAgICBjYWNoZS4KICAgIE56FnBzdXRpbC5uZXRfaW9fY291bnRlcnNjAQAAAAAAAAACAAAABAAAAFMAAABzFAAAAGcAfABdDH0BdAB8AYMBkQJxBFMAcmoAAAApAXJnAQAAKQJybAAAAHJ1AAAAcmoAAAByagAAAHJuAAAAcm8AAABHCAAAcwIAAAAGAHojbmV0X2lvX2NvdW50ZXJzLjxsb2NhbHM+LjxsaXN0Y29tcD4pCHJ3AAAAcl8AAAByjQEAAHK2AAAAcgQAAADaBnNuZXRpb3J4AQAAco4BAAApBVoGcGVybmljco8BAABykAEAAFoDbmljcpEBAAByagAAAHJqAAAAcm4AAAByXwAAACMIAABzFAAAAAAaCAEEAQwBBAEKAQQBEgESAQQCehZwc3V0aWwubmV0X2lvX2NvdW50ZXJzcjIBAABjAQAAAAAAAAABAAAAAwAAAEMAAABzCgAAAHQAoAF8AKEBUwApAWGYBQAAUmV0dXJuIHN5c3RlbS13aWRlIHNvY2tldCBjb25uZWN0aW9ucyBhcyBhIGxpc3Qgb2YKICAgIChmZCwgZmFtaWx5LCB0eXBlLCBsYWRkciwgcmFkZHIsIHN0YXR1cywgcGlkKSBuYW1lZHR1cGxlcy4KICAgIEluIGNhc2Ugb2YgbGltaXRlZCBwcml2aWxlZ2VzICdmZCcgYW5kICdwaWQnIG1heSBiZSBzZXQgdG8gLTEKICAgIGFuZCBOb25lIHJlc3BlY3RpdmVseS4KICAgIFRoZSAqa2luZCogcGFyYW1ldGVyIGZpbHRlcnMgZm9yIGNvbm5lY3Rpb25zIHRoYXQgZml0IHRoZQogICAgZm9sbG93aW5nIGNyaXRlcmlhOgoKICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgS2luZCBWYWx1ZSB8IENvbm5lY3Rpb25zIHVzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgaW5ldCAgICAgICB8IElQdjQgYW5kIElQdjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgaW5ldDQgICAgICB8IElQdjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgaW5ldDYgICAgICB8IElQdjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgdGNwICAgICAgICB8IFRDUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgdGNwNCAgICAgICB8IFRDUCBvdmVyIElQdjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgdGNwNiAgICAgICB8IFRDUCBvdmVyIElQdjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgdWRwICAgICAgICB8IFVEUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgdWRwNCAgICAgICB8IFVEUCBvdmVyIElQdjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgdWRwNiAgICAgICB8IFVEUCBvdmVyIElQdjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgdW5peCAgICAgICB8IFVOSVggc29ja2V0IChib3RoIFVEUCBhbmQgVENQIHByb3RvY29scykgICAgICAgICAgIHwKICAgIHwgYWxsICAgICAgICB8IHRoZSBzdW0gb2YgYWxsIHRoZSBwb3NzaWJsZSBmYW1pbGllcyBhbmQgcHJvdG9jb2xzIHwKICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCiAgICBPbiBtYWNPUyB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHJvb3QgcHJpdmlsZWdlcy4KICAgICkCcncAAAByYAAAACkBcjQBAAByagAAAHJqAAAAcm4AAAByYAAAAE8IAABzAgAAAAAaYwAAAAAAAAAACwAAAAoAAABDAAAAcwIBAAB0AGoBZAFrBX0AfAByFmQCZANsAn0BdAOgBKEAfQJ8AmoFZARkBYQAZAaNAQEAdAagB3QIoQF9A3jAfAJEAF24XAZ9BH0FfQZ9B30IfQl8AHKkeQ58AaAJfAWhAX0FVwBuQgQAdAprCnKi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FwAAAHIYAAAAchkAAAByGgAAAHIbAAAAchwAAAByHQAAAHIeAAAAch8AAAByIAAAAHIhAAAAciIAAAByIwAAAHIkAAAAciUAAAByJgAAAHInAAAAcigAAAByKQAAAHIqAAAAcisAAAByLAAAAHItAAAAci4AAAByLwAAAHIwAAAAcjEAAAByMgAAAHIzAAAAcjQAAAByNQAAAHI2AAAAcjcAAADaC1BST0NGU19QQVRIcjgAAABydwAAAHI5AAAAcjoAAAByOwAAAHI8AAAAcj0AAABaD19wc3V0aWxfd2luZG93c3I+AAAAcj8AAAByQAAAAHJBAAAAckIAAAByQwAAAHJEAAAAckUAAAByRgAAAHJHAAAAckgAAABySQAAAHJKAAAAcksAAAByTAAAAHJNAAAAck4AAABy0QAAANoIcGxhdGZvcm3aB19fYWxsX1/aBmV4dGVuZFoOX19leHRyYV9fYWxsX19ywAAAAHJSAAAAcmkAAADaB2dsb2JhbHNaCF9nbG9iYWxzcn0AAAByTgEAAHLiAAAA2gdpc3VwcGVyctAAAABy2wAAAHJRAAAA2gpfX2F1dGhvcl9fclAAAAByyAAAAHK9AQAAck8AAAByEgEAAHIiAQAActgAAAByVgEAAHKhAAAAcmsAAADaB3JlcGxhY2VaBGNleHRypgAAAHK1AAAAcvEAAABycwAAAHJ2AAAAcnsAAAByhQAAAHKMAAAAcskAAAByxgAAAHJTAAAAclUAAAByVAAAAHJbAQAA2gRMb2NrcpwAAAByVgAAAHJXAAAAcl0AAAByWgAAAHJ2AQAA2glFeGNlcHRpb25ydwEAAHJpAQAAcmsBAABycgEAAHJbAAAAcnoBAAByewEAAHJcAAAAcl4AAAByfAEAAHJ/AQAAclgAAAByWQAAAHJlAAAAcmQAAAByYwAAANoHcGFydGlhbNoLY2FjaGVfY2xlYXJyXwAAAHJgAAAAcmEAAAByYgAAAHKlAQAAcq8BAABysAEAAHJnAAAAcmYAAABysQEAAHKyAQAAcsEBAABybQAAAHJ1AAAAcrQAAAByagAAAHJqAAAAcmoAAABybgAAANoIPG1vZHVsZT4VAAAAc9wBAAAEAgwBCAEIAQgBCAEIAQgBCAEIAQgBCAECAQwBDgEKAgwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAgwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBDAIMAQwBDAEMAQwBDAEMAQwBDAEMAQwCBgMEAgwCDAEMAQwBEAIGAQwBDAEMAQwBDAEMAQwBDAEMAQwBDAEOAgYBDgIGAQ4CBgEMAQwBDAQGAgYBDAQGAw4FCAECAwQCCAEIAQgBAgIIAQgBCAMCAgYCBAIQAQYIBAMIAQQBCAECAQYBAgEGAggEDAMOAgwCBgEEAQ4BFgEOARABBAIGAgQBBAEYAg4BBAEEAQYIDgESAQIBDgEOAQQBJgIMAQQBCAEKAQgBCAgMAggCCA0IDAgQEH8AfwB/AH8AfwB/AH8AVQIBFAsQVAgICBIEAQgDCksKXgoXChwCAQoBEAIKAgIBDgEQAgoDCBMIEAgVCloEAQQDCkUIBQwCCigKAxgDDAEIAgYCCggIOwgVCAgKHAovBAEMAQgICicEAQwBCAMKHQgwCBUMAgogCgQMAggHCgQMAggMCggIBwgSBgIIBggKCD0EARABBAIKAQ==
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 10
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
_common.cpython-37.pyc
20.14 KB
lrw-r--r--
2023-04-24 20:03:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_compat.cpython-37.pyc
10.94 KB
lrw-r--r--
2023-04-24 20:03:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_psaix.cpython-37.pyc
14.69 KB
lrw-r--r--
2023-04-24 20:03:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_psbsd.cpython-37.pyc
20.32 KB
lrw-r--r--
2023-04-24 20:03:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_pslinux.cpython-37.pyc
48.01 KB
lrw-r--r--
2023-04-24 20:03:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_psosx.cpython-37.pyc
14.14 KB
lrw-r--r--
2023-04-24 20:03:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_psposix.cpython-37.pyc
4.41 KB
lrw-r--r--
2023-04-24 20:03:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_pssunos.cpython-37.pyc
17.70 KB
lrw-r--r--
2023-04-24 20:03:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_pswindows.cpython-37.pyc
28.00 KB
lrw-r--r--
2023-04-24 20:03:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
61.93 KB
lrw-r--r--
2023-04-24 20:03:47
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).