REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 65.72 KB
Close
/opt/alt/python37/lib64/python3.7/site-packages/numpy/core/__pycache__/defchararray.cpython-37.pyc
Text
Base64
Qg0NCgAAAADB2EZkQQcBAOMAAAAAAAAAAAAAAAA0AAAAQAAAAHMQAwAAZABaAGQBZAJsAW0CWgJtA1oDbQRaBAEAZAFkA2wFWgVkBGQFbAZtB1oHbQhaCG0JWgltCloKbQtaC20MWgwBAGQEZAZsDW0OWg5tD1oPAQBkBGQHbA1tEFoRAQBkAWQIbBJtE1oTAQBkAWQJbBRtFVoVbRZaFgEAZAFkA2wXWhdkCmQLZAxkDWQOZA9kEGQRZBJkE2QUZBVkFmQXZBhkGWQaZBtkHGQdZB5kH2QgZCFkImQjZCRkJWQmZCdkKGQpZCpkK2QsZC1kLmQvZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkOmQ7ZDxkPWc0WhhkAWEZZQVqGmQBGQBkPmsFkAFyCmUbWhxlHVoebghlH1ocZRtaHmUgWiFkP2RAhABaImRBZEKEAFojZENkRIQAWiRkRWRGhABaJWRHZAuEAFomZEhkDIQAWidkSWQNhABaKGRKZA6EAFopZEtkD4QAWipkTGQQhABaK2RNZBGEAFosZE5kEoQAWi1kT2QThABaLmRQZBSEAFovZFFkFYQAWjBkfmRTZBaEAVoxZH9kVGQXhAFaMmSAZFVkGIQBWjNkgWRWZBmEAVo0ZIJkV2QahAFaNWSDZFlkG4QBWjZkhGRaZByEAVo3ZIVkW2QdhAFaOGRcZB6EAFo5ZF1kH4QAWjpkXmQghABaO2RfZCGEAFo8ZGBkIoQAWj1kYWQjhABaPmRiZCSEAFo/ZGNkJYQAWkBkhmRkZCaEAVpBZGVkJ4QAWkJkh2RmZCiEAVpDZGdkKYQAWkRkiGRoZCqEAVpFZIlkaWQrhAFaRmSKZGpkLIQBWkdki2RrZC2EAVpIZGxkLoQAWklkjGRtZC+EAVpKZI1kbmQwhAFaS2SOZG9kMYQBWkxkj2RwZDKEAVpNZJBkcWQzhAFaTmSRZHJkNIQBWk9kc2Q1hABaUGR0ZDaEAFpRZJJkdWQ3hAFaUmR2ZDiEAFpTZHdkOYQAWlRkeGQ6hABaVWR5ZDuEAFpWRwBkemQKhABkCmUOgwNaV2STZHxkPIQBWhBklGR9ZD2EAVpYZANTACmVYXMCAAAKVGhpcyBtb2R1bGUgY29udGFpbnMgYSBzZXQgb2YgZnVuY3Rpb25zIGZvciB2ZWN0b3JpemVkIHN0cmluZwpvcGVyYXRpb25zIGFuZCBtZXRob2RzLgoKLi4gbm90ZTo6CiAgIFRoZSBgY2hhcmFycmF5YCBjbGFzcyBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKICAgTnVtYXJyYXksIGl0IGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgbmV3IGRldmVsb3BtZW50LiBTdGFydGluZyBmcm9tIG51bXB5CiAgIDEuNCwgaWYgb25lIG5lZWRzIGFycmF5cyBvZiBzdHJpbmdzLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYXJyYXlzIG9mCiAgIGBkdHlwZWAgYG9iamVjdF9gLCBgc3RyaW5nX2Agb3IgYHVuaWNvZGVfYCwgYW5kIHVzZSB0aGUgZnJlZSBmdW5jdGlvbnMKICAgaW4gdGhlIGBudW1weS5jaGFyYCBtb2R1bGUgZm9yIGZhc3QgdmVjdG9yaXplZCBzdHJpbmcgb3BlcmF0aW9ucy4KClNvbWUgbWV0aG9kcyB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZyBtZXRob2QgaXMKYXZhaWxhYmxlIGluIHlvdXIgdmVyc2lvbiBvZiBQeXRob24uCgpUaGUgcHJlZmVycmVkIGFsaWFzIGZvciBgZGVmY2hhcmFycmF5YCBpcyBgbnVtcHkuY2hhcmAuCgrpAAAAACkD2ghkaXZpc2lvbtoPYWJzb2x1dGVfaW1wb3J02g5wcmludF9mdW5jdGlvbk7pAQAAACkG2gdzdHJpbmdf2gh1bmljb2RlX9oHaW50ZWdlctoHb2JqZWN0X9oFYm9vbF/aCWNoYXJhY3RlcikC2gduZGFycmF52hJjb21wYXJlX2NoYXJhcnJheXMpAdoFYXJyYXkpAdoLX3ZlY19zdHJpbmcpAtoHYXNieXRlc9oEbG9uZ9oJY2hhcmFycmF52gVlcXVhbNoJbm90X2VxdWFs2g1ncmVhdGVyX2VxdWFs2gpsZXNzX2VxdWFs2gdncmVhdGVy2gRsZXNz2gdzdHJfbGVu2gNhZGTaCG11bHRpcGx52gNtb2TaCmNhcGl0YWxpemXaBmNlbnRlctoFY291bnTaBmRlY29kZdoGZW5jb2Rl2ghlbmRzd2l0aNoKZXhwYW5kdGFic9oEZmluZNoFaW5kZXjaB2lzYWxudW3aB2lzYWxwaGHaB2lzZGlnaXTaB2lzbG93ZXLaB2lzc3BhY2XaB2lzdGl0bGXaB2lzdXBwZXLaBGpvaW7aBWxqdXN02gVsb3dlctoGbHN0cmlw2glwYXJ0aXRpb27aB3JlcGxhY2XaBXJmaW5k2gZyaW5kZXjaBXJqdXN02gpycGFydGl0aW9u2gZyc3BsaXTaBnJzdHJpcNoFc3BsaXTaCnNwbGl0bGluZXPaCnN0YXJ0c3dpdGjaBXN0cmlw2ghzd2FwY2FzZdoFdGl0bGXaCXRyYW5zbGF0ZdoFdXBwZXLaBXpmaWxs2glpc251bWVyaWPaCWlzZGVjaW1hbHIOAAAA2gdhc2FycmF56QMAAABjAAAAAAAAAAACAAAABQAAAEcAAABzNAAAAHgufABEAF0mfQF0AHwBdAGDAnModAJ0A6AEfAGhAWoFagZ0B4MCcgZ0B1MAcQZXAHQIUwApAXq9CiAgICBIZWxwZXIgZnVuY3Rpb24gZm9yIGRldGVybWluaW5nIHRoZSBvdXRwdXQgdHlwZSBvZiBzb21lIHN0cmluZwogICAgb3BlcmF0aW9ucy4KCiAgICBGb3IgYW4gb3BlcmF0aW9uIG9uIHR3byBuZGFycmF5cywgaWYgYXQgbGVhc3Qgb25lIGlzIHVuaWNvZGUsIHRoZQogICAgcmVzdWx0IHNob3VsZCBiZSB1bmljb2RlLgogICAgKQnaCmlzaW5zdGFuY2XaCF91bmljb2Rl2gppc3N1YmNsYXNz2gVudW1weXJEAAAA2gVkdHlwZdoEdHlwZXIHAAAAcgYAAAApAtoEYXJnc9oBeKkAck4AAAD6Si9vcHQvYWx0L3B5dGhvbjM3L2xpYjY0L3B5dGhvbjMuNy9zaXRlLXBhY2thZ2VzL251bXB5L2NvcmUvZGVmY2hhcmFycmF5LnB52gxfdXNlX3VuaWNvZGUyAAAAcwoAAAAACAoBCgEUAQgBclAAAABjAQAAAAAAAAABAAAABAAAAEMAAABzDgAAAHQAoAF8AKACoQChAVMAKQF6hgogICAgSGVscGVyIGZ1bmN0aW9uIHRvIGNhc3QgYSByZXN1bHQgYmFjayBpbnRvIGEgc3RyaW5nIG9yIHVuaWNvZGUgYXJyYXkKICAg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N2Q4hAFaG2SBZDlkOoQBWhxkgmQ7ZDyEAVodZD1kPoQAWh5kP2RAhABaH2RBZEKEAFogZENkRIQAWiFkRWRGhABaImRHZEiEAFojZElkSoQAWiRkS2RMhABaJWSDZE1kToQBWiZkT2RQhABaJ2SEZFFkUoQBWihkU2RUhABaKWSFZFVkVoQBWipkhmRXZFiEAVorZIdkWWRahAFaLGSIZFtkXIQBWi1kXWRehABaLmSJZF9kYIQBWi9kimRhZGKEAVowZItkY2RkhAFaMWSMZGVkZoQBWjJkjWRnZGiEAVozZI5kaWRqhAFaNGRrZGyEAFo1ZG1kboQAWjZkj2RvZHCEAVo3ZHFkcoQAWjhkc2R0hABaOWR1ZHaEAFo6ZHdkeIQAWjtkBFMAKZByEgAAAGHqDQAACiAgICBjaGFyYXJyYXkoc2hhcGUsIGl0ZW1zaXplPTEsIHVuaWNvZGU9RmFsc2UsIGJ1ZmZlcj1Ob25lLCBvZmZzZXQ9MCwKICAgICAgICAgICAgICBzdHJpZGVzPU5vbmUsIG9yZGVyPU5vbmUpCgogICAgUHJvdmlkZXMgYSBjb252ZW5pZW50IHZpZXcgb24gYXJyYXlzIG9mIHN0cmluZyBhbmQgdW5pY29kZSB2YWx1ZXMuCgogICAgLi4gbm90ZTo6CiAgICAgICBUaGUgYGNoYXJhcnJheWAgY2xhc3MgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoCiAgICAgICBOdW1hcnJheSwgaXQgaXMgbm90IHJlY29tbWVuZGVkIGZvciBuZXcgZGV2ZWxvcG1lbnQuIFN0YXJ0aW5nIGZyb20gbnVtcHkKICAgICAgIDEuNCwgaWYgb25lIG5lZWRzIGFycmF5cyBvZiBzdHJpbmdzLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYXJyYXlzIG9mCiAgICAgICBgZHR5cGVgIGBvYmplY3RfYCwgYHN0cmluZ19gIG9yIGB1bmljb2RlX2AsIGFuZCB1c2UgdGhlIGZyZWUgZnVuY3Rpb25zCiAgICAgICBpbiB0aGUgYG51bXB5LmNoYXJgIG1vZHVsZSBmb3IgZmFzdCB2ZWN0b3JpemVkIHN0cmluZyBvcGVyYXRpb25zLgoKICAgIFZlcnN1cyBhIHJlZ3VsYXIgTnVtUHkgYXJyYXkgb2YgdHlwZSBgc3RyYCBvciBgdW5pY29kZWAsIHRoaXMKICAgIGNsYXNzIGFkZHMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsaXR5OgoKICAgICAgMSkgdmFsdWVzIGF1dG9tYXRpY2FsbHkgaGF2ZSB3aGl0ZXNwYWNlIHJlbW92ZWQgZnJvbSB0aGUgZW5kCiAgICAgICAgIHdoZW4gaW5kZXhlZAoKICAgICAgMikgY29tcGFyaXNvbiBvcGVyYXRvcnMgYXV0b21hdGljYWxseSByZW1vdmUgd2hpdGVzcGFjZSBmcm9tIHRoZQogICAgICAgICBlbmQgd2hlbiBjb21wYXJpbmcgdmFsdWVzCgogICAgICAzKSB2ZWN0b3JpemVkIHN0cmluZyBvcGVyYXRpb25zIGFyZSBwcm92aWRlZCBhcyBtZXRob2RzCiAgICAgICAgIChlLmcuIGAuZW5kc3dpdGhgKSBhbmQgaW5maXggb3BlcmF0b3JzIChlLmcuIGBgIisiLCAiKiIsICIlImBgKQoKICAgIGNoYXJhcnJheXMgc2hvdWxkIGJlIGNyZWF0ZWQgdXNpbmcgYG51bXB5LmNoYXIuYXJyYXlgIG9yCiAgICBgbnVtcHkuY2hhci5hc2FycmF5YCwgcmF0aGVyIHRoYW4gdGhpcyBjb25zdHJ1Y3RvciBkaXJlY3RseS4KCiAgICBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgdGhlIGFycmF5LCB1c2luZyBgYnVmZmVyYCAod2l0aCBgb2Zmc2V0YAogICAgYW5kIGBzdHJpZGVzYCkgaWYgaXQgaXMgbm90IGBgTm9uZWBgLiBJZiBgYnVmZmVyYCBpcyBgYE5vbmVgYCwgdGhlbgogICAgY29uc3RydWN0cyBhIG5ldyBhcnJheSB3aXRoIGBzdHJpZGVzYCBpbiAiQyBvcmRlciIsIHVubGVzcyBib3RoCiAgICBgYGxlbihzaGFwZSkgPj0gMmBgIGFuZCBgYG9yZGVyPSdGb3J0cmFuJ2BgLCBpbiB3aGljaCBjYXNlIGBzdHJpZGVzYAogICAgaXMgaW4gIkZvcnRyYW4gb3JkZXIiLgoKICAgIE1ldGhvZHMKICAgIC0tLS0tLS0KICAgIGFzdHlwZQogICAgYXJnc29ydAogICAgY29weQogICAgY291bnQKICAgIGRlY29kZQogICAgZHVtcAogICAgZHVtcHMKICAgIGVuY29kZQogICAgZW5kc3dpdGgKICAgIGV4cGFuZHRhYnMKICAgIGZpbGwKICAgIGZpbmQKICAgIGZsYXR0ZW4KICAgIGdldGZpZWxkCiAgICBpbmRleAogICAgaXNhbG51bQogICAgaXNhbHBoYQogICAgaXNkZWNpbWFsCiAgICBpc2RpZ2l0CiAgICBpc2xvd2VyCiAgICBpc251bWVyaWMKICAgIGlzc3BhY2UKICAgIGlzdGl0bGUKICAgIGlzdXBwZXIKICAgIGl0ZW0KICAgIGpvaW4KICAgIGxqdXN0CiAgICBsb3dlcgogICAgbHN0cmlwCiAgICBub256ZXJvCiAgICBwdXQKICAgIHJhdmVsCiAgICByZXBlYXQKICAgIHJlcGxhY2UKICAgIHJlc2hhcGUKICAgIHJlc2l6ZQogICAgcmZpbmQKICAgIHJpbmRleAogICAgcmp1c3QKICAgIHJzcGxpdAogICAgcnN0cmlwCiAgICBzZWFyY2hzb3J0ZWQKICAgIHNldGZpZWxkCiAgICBzZXRmbGFncwogICAgc29ydAogICAgc3BsaXQKICAgIHNwbGl0bGluZXMKICAgIHNxdWVlemUKICAgIHN0YXJ0c3dpdGgKICAgIHN0cmlwCiAgICBzd2FwYXhlcwogICAgc3dhcGNhc2UKICAgIHRha2UKICAgIHRpdGxlCiAgICB0b2ZpbGUKICAgIHRvbGlzdAogICAgdG9zdHJpbmcKICAgIHRyYW5zbGF0ZQogICAgdHJhbnNwb3NlCiAgICB1cHBlcgogICAgdmlldwogICAgemZpbGwKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBzaGFwZSA6IHR1cGxlCiAgICAgICAgU2hhcGUgb2YgdGhlIGFycmF5LgogICAgaXRlbXNpemUgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgTGVuZ3RoIG9mIGVhY2ggYXJyYXkgZWxlbWVudCwgaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuIERlZmF1bHQgaXMgMS4KICAgIHVuaWNvZGUgOiBib29sLCBvcHRpb25hbAogICAgICAgIEFyZSB0aGUgYXJyYXkgZWxlbWVudHMgb2YgdHlwZSB1bmljb2RlIChUcnVlKSBvciBzdHJpbmcgKEZhbHNlKS4KICAgICAgICBEZWZhdWx0IGlzIEZhbHNlLgogICAgYnVmZmVyIDogaW50LCBvcHRpb25hbAogICAgICAgIE1lbW9yeSBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZiB0aGUgYXJyYXkgZGF0YS4gIERlZmF1bHQgaXMgTm9uZSwKICAgICAgICBpbiB3aGljaCBjYXNlIGEgbmV3IGFycmF5IGlzIGNyZWF0ZWQuCiAgICBvZmZzZXQgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgRml4ZWQgc3RyaWRlIGRpc3BsYWNlbWVudCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYW4gYXhpcz8KICAgICAgICBEZWZhdWx0IGlzIDAuIE5lZWRzIHRvIGJlID49MC4KICAgIHN0cmlkZXMgOiBhcnJheV9saWtlIG9mIGludHMsIG9wdGlvbmFsCiAgICAgICAgU3RyaWRlcyBmb3IgdGhlIGFycmF5IChzZWUgYG5kYXJyYXkuc3RyaWRlc2AgZm9yIGZ1bGwgZGVzY3JpcHRpb24pLgogICAgICAgIERlZmF1bHQgaXMgTm9uZS4KICAgIG9yZGVyIDogeydDJywgJ0YnfSwgb3B0aW9uYWwKICAgICAgICBUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIGFycmF5IGRhdGEgaXMgc3RvcmVkIGluIG1lbW9yeTogJ0MnIC0+CiAgICAgICAgInJvdyBtYWpvciIgb3JkZXIgKHRoZSBkZWZhdWx0KSwgJ0YnIC0+ICJjb2x1bW4gbWFqb3IiCiAgICAgICAgKEZvcnRyYW4pIG9yZGVyLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGNoYXJhciA9IG5wLmNoYXJhcnJheSgoMywgMykpCiAgICA+Pj4gY2hhcmFyWzpdID0gJ2EnCiAgICA+Pj4gY2hhcmFyCiAgICBjaGFyYXJyYXkoW1snYScsICdhJywgJ2EnXSwKICAgICAgICAgICBbJ2EnLCAnYScsICdhJ10sCiAgICAgICAgICAgWydh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LS0tLQogICAgICAgIGFkZAogICAgICAgICkCckQAAAByGgAAACkCco8AAABymAAAAHJOAAAAck4AAAByTwAAAHJfAAAAiAcAAHMCAAAAAAl6EWNoYXJhcnJheS5fX2FkZF9fYwIAAAAAAAAAAgAAAAUAAABDAAAAcxQAAAB0AHQBdAKgAHwBoQF8AIMCgwFTACkBesAKICAgICAgICBSZXR1cm4gKG90aGVyICsgc2VsZiksIHRoYXQgaXMgc3RyaW5nIGNvbmNhdGVuYXRpb24sCiAgICAgICAgZWxlbWVudC13aXNlIGZvciBhIHBhaXIgb2YgYXJyYXlfbGlrZXMgb2YgYHN0cmluZ19gIG9yIGB1bmljb2RlX2AuCgogICAgICAgIFNlZSBhbHNvCiAgICAgICAgLS0tLS0tLS0KICAgICAgICBhZGQKICAgICAgICApA3JEAAAAchoAAABySQAAACkCco8AAABymAAAAHJOAAAAck4AAAByTwAAANoIX19yYWRkX1+TBwAAcwIAAAAACXoSY2hhcmFycmF5Ll9fcmFkZF9fYwIAAAAAAAAAAgAAAAQAAABDAAAAcw4AAAB0AHQBfAB8AYMCgwFTACkBepUKICAgICAgICBSZXR1cm4gKHNlbGYgKiBpKSwgdGhhdCBpcyBzdHJpbmcgbXVsdGlwbGUgY29uY2F0ZW5hdGlvbiwKICAgICAgICBlbGVtZW50LXdpc2UuCgogICAgICAgIFNlZSBhbHNvCiAgICAgICAgLS0tLS0tLS0KICAgICAgICBtdWx0aXBseQogICAgICAgICkCckQAAAByGwAAACkCco8AAAByZAAAAHJOAAAAck4AAAByTwAAAHJhAAAAngcAAHMCAAAAAAl6EWNoYXJhcnJheS5fX211bF9fYwIAAAAAAAAAAgAAAAQAAABDAAAAcw4AAAB0AHQBfAB8AYMCgwFTACkBepUKICAgICAgICBSZXR1cm4gKHNlbGYgKiBpKSwgdGhhdCBpcyBzdHJpbmcgbXVsdGlwbGUgY29uY2F0ZW5hdGlvbiwKICAgICAgICBlbGVtZW50LXdpc2UuCgogICAgICAgIFNlZSBhbHNvCiAgICAgICAgLS0tLS0tLS0KICAgICAgICBtdWx0aXBseQogICAgICAgICkCckQAAAByGwAAACkC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CHIqdAB8AHQCgwJyJmQCfQNuBGQDfQN8AWQBawhyOnQDfACDAX0BdAN8AIMBfAEaAH0FfANyanQEagVkBGsCcmB8AKAGZAWhAX0AcXJ0AnwAgwF9AG4IdAF8AIMBfQB0B3wFfAF8A3wAfARkBo0FUwB0AHwAdAh0CWYCgwJynHQKoAt8AKEBfQB0AHwAdAyDApABcoh0DXwAag5qD3QQgwKQAXKIdAB8AHQHgwJzzHwAoBF0B6EBfQB8AWQBawhy8HwAahJ9AXQNfABqDmoPdBODAnLwfAFkBxwAfQF8A2QBawiQAXIUdA18AGoOag90E4MCkAFyEGQCfQNuBGQDfQN8A5ABciB0E30GbgR0FH0GfARkAWsJkAFyPHQKagt8AHwEZAiNAn0AfAKQAXNyfAF8AGoSawOQAXNyfAOQAXNgdAB8AHQTgwKQAXNyfAOQAXKEdAB8AHQUgwKQAXKEfACgFXwGdBZ8AYMBZgKhAX0AfABTAHQAfAB0DIMCkAFytnQNfABqDmoPdBeDApABcrZ8AWQBawiQAXK2fACgGKEAfQB8A5ABcsJ0E30GbgR0FH0GfAFkAWsIkAFy4nQZfAB8BnwEZAJkCY0EfQduFHQZfAB8BnwBZgJ8BGQCZAmNBH0HfAegEXQHoQFTACkKYacJAAAKICAgIENyZWF0ZSBhIGBjaGFyYXJyYXlgLgoKICAgIC4uIG5vdGU6OgogICAgICAgVGhpcyBjbGFzcyBpcyBwcm92aWRlZCBmb3IgbnVtYXJyYXkgYmFja3dhcmQtY29tcGF0aWJpbGl0eS4KICAgICAgIE5ldyBjb2RlIChub3QgY29uY2VybmVkIHdpdGggbnVtYXJyYXkgY29tcGF0aWJpbGl0eSkgc2hvdWxkIHVzZQogICAgICAgYXJyYXlzIG9mIHR5cGUgYHN0cmluZ19gIG9yIGB1bmljb2RlX2AgYW5kIHVzZSB0aGUgZnJlZSBmdW5jdGlvbnMKICAgICAgIGluIDptb2Q6YG51bXB5LmNoYXIgPG51bXB5LmNvcmUuZGVmY2hhcmFycmF5PmAgZm9yIGZhc3QKICAgICAgIHZlY3Rvcml6ZWQgc3RyaW5nIG9wZXJhdGlvbnMgaW5zdGVhZC4KCiAgICBWZXJzdXMgYSByZWd1bGFyIE51bVB5IGFycmF5IG9mIHR5cGUgYHN0cmAgb3IgYHVuaWNvZGVgLCB0aGlzCiAgICBjbGFzcyBhZGRzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbGl0eToKCiAgICAgIDEpIHZhbHVlcyBhdXRvbWF0aWNhbGx5IGhhdmUgd2hpdGVzcGFjZSByZW1vdmVkIGZyb20gdGhlIGVuZAogICAgICAgICB3aGVuIGluZGV4ZWQKCiAgICAgIDIpIGNvbXBhcmlzb24gb3BlcmF0b3JzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHdoaXRlc3BhY2UgZnJvbSB0aGUKICAgICAgICAgZW5kIHdoZW4gY29tcGFyaW5nIHZhbHVlcwoKICAgICAgMykgdmVjdG9yaXplZCBzdHJpbmcgb3BlcmF0aW9ucyBhcmUgcHJvdmlkZWQgYXMgbWV0aG9kcwogICAgICAgICAoZS5nLiBgc3RyLmVuZHN3aXRoYCkgYW5kIGluZml4IG9wZXJhdG9ycyAoZS5nLiBgYCssICosICVgYCkKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBvYmogOiBhcnJheSBvZiBzdHIgb3IgdW5pY29kZS1saWtlCgogICAgaXRlbXNpemUgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgYGl0ZW1zaXplYCBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIHNjYWxhciBpbiB0aGUKICAgICAgICByZXN1bHRpbmcgYXJyYXkuICBJZiBgaXRlbXNpemVgIGlzIE5vbmUsIGFuZCBgb2JqYCBpcyBhbgogICAgICAgIG9iamVjdCBhcnJheSBvciBhIFB5dGhvbiBsaXN0LCB0aGUgYGl0ZW1zaXplYCB3aWxsIGJlCiAgICAgICAgYXV0b21hdGljYWxseSBkZXRlcm1pbmVkLiAgSWYgYGl0ZW1zaXplYCBpcyBwcm92aWRlZCBhbmQgYG9iamAKICAgICAgICBpcyBvZiB0eXBlIHN0ciBvciB1bmljb2RlLCB0aGVuIHRoZSBgb2JqYCBzdHJpbmcgd2lsbCBiZQogICAgICAgIGNodW5rZWQgaW50byBgaXRlbXNpemVgIHBpZWNlcy4KCiAgICBjb3B5IDogYm9vbCwgb3B0aW9uYWwKICAgICAgICBJZiB0cnVlIChkZWZhdWx0KSwgdGhlbiB0aGUgb2JqZWN0IGlzIGNvcGllZC4gIE90aGVyd2lzZSwgYSBjb3B5CiAgICAgICAgd2lsbCBvbmx5IGJlIG1hZGUgaWYgX19hcnJheV9fIHJldHVybnMgYSBjb3B5LCBpZiBvYmogaXMgYQogICAgICAgIG5lc3RlZCBzZXF1ZW5jZSwgb3IgaWYgYSBjb3B5IGlzIG5lZWRlZCB0byBzYXRpc2Z5IGFueSBvZiB0aGUgb3RoZXIKICAgICAgICByZXF1aXJlbWVudHMgKGBpdGVtc2l6ZWAsIHVuaWNvZGUsIGBvcmRlcmAsIGV0Yy4pLgoKICAgIHVuaWNvZGUgOiBib29sLCBvcHRpb25hbAogICAgICAgIFdoZW4gdHJ1ZSwgdGhlIHJlc3VsdGluZyBgY2hhcmFycmF5YCBjYW4gY29udGFpbiBVbmljb2RlCiAgICAgICAgY2hhcmFjdGVycywgd2hlbiBmYWxzZSBvbmx5IDgtYml0IGNoYXJhY3RlcnMuICBJZiB1bmljb2RlIGlzCiAgICAgICAgYE5vbmVgIGFuZCBgb2JqYCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKCiAgICAgICAgICAtIGEgYGNoYXJhcnJheWAsCiAgICAgICAgICAtIGFuIG5kYXJyYXkgb2YgdHlwZSBgc3RyYCBvciBgdW5pY29kZWAKICAgICAgICAgIC0gYSBQeXRob24gc3RyIG9yIHVuaWNvZGUgb2JqZWN0LAoKICAgICAgICB0aGVuIHRoZSB1bmljb2RlIHNldHRpbmcgb2YgdGhlIG91dHB1dCBhcnJheSB3aWxsIGJlCiAgICAgICAgYXV0b21hdGljYWxseSBkZXRlcm1pbmVkLgoKICAgIG9yZGVyIDogeydDJywgJ0YnLCAnQSd9LCBvcHRpb25hbAogICAgICAgIFNwZWNpZnkgdGhlIG9yZGVyIG9mIHRoZSBhcnJheS4gIElmIG9yZGVyIGlzICdDJyAoZGVmYXVsdCksIHRoZW4gdGhlCiAgICAgICAgYXJyYXkgd2lsbCBiZSBpbiBDLWNvbnRpZ3VvdXMgb3JkZXIgKGxhc3QtaW5kZXggdmFyaWVzIHRoZQogICAgICAgIGZhc3Rlc3QpLiAgSWYgb3JkZXIgaXMgJ0YnLCB0aGVuIHRoZSByZXR1cm5lZCBhcnJheQogICAgICAgIHdpbGwgYmUgaW4gRm9ydHJhbi1jb250aWd1b3VzIG9yZGVyIChmaXJzdC1pbmRleCB2YXJpZXMgdGhlCiAgICAgICAgZmFzdGVzdCkuICBJZiBvcmRlciBpcyAnQScsIHRoZW4gdGhlIHJldHVybmVkIGFycmF5IG1heQogICAgICAgIGJlIGluIGFueSBvcmRlciAoZWl0aGVyIEMtLCBGb3J0cmFuLWNvbnRpZ3VvdXMsIG9yIGV2ZW4KICAgICAgICBkaXNjb250aWd1b3VzKS4KICAgIE5URmn//wAA2gZ1dGZfMzIpBHJXAAAAco0AAAByhAAAAHKDAAAAclYAAAApAXKDAAAAKQNySgAAAHKDAAAAWgVzdWJvaykackYAAADaBl9ieXRlc3JHAAAAcpUAAAByhwAAANoKbWF4dW5pY29kZXIhAAAAchIAAADaBGxpc3TaBXR1cGxlckkAAAByRAAAAHIMAAAAckgAAABySgAAAHJLAAAAcgsAAADaBHZpZXdyVwAAAHIHAAAAcgYAAADaBmFzdHlwZXIRAAAA2gZvYmplY3RyUQAAANoGbmFycmF5KQhykQAAAHJXAAAA2gRjb3B5co0AAABygwAAAHKMAAAAckoAAABylgAAAHJOAAAAck4AAAByTwAAAHIOAAAArgkAAHNiAAAAAD4OAQgBCgEGAgQCCAEIAQwCBAEKCgwCCgQIAggBCgIOAQoCHAMKAQoCCAEGBA4BCAIKARABBgIEAgYBBgIEAgoBDgEGAQwBEgESARIBBAIcAQoECAMGAQYCBAIKARICFAFjBAAAAAAAAAAEAAAABwAAAEMAAABzEgAAAHQAfAB8AWQBfAJ8A2QCjQVTACkDYd0GAAAKICAgIENvbnZlcnQgdGhlIGlucHV0IHRvIGEgYGNoYXJhcnJheWAsIGNvcHlpbmcgdGhlIGRhdGEgb25seSBpZgogICAgbmVjZXNzYXJ5LgoKICAgIFZlcnN1cyBhIHJlZ3VsYXIgTnVtUHkgYXJyYXkgb2YgdHlwZSBgc3RyYCBvciBgdW5pY29kZWAsIHRoaXMKICAgIGNsYXNzIGFkZHMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsaXR5OgoKICAgICAgMSkgdmFsdWVzIGF1dG9tYXRpY2FsbHkgaGF2ZSB3aGl0ZXNwYWNlIHJlbW92ZWQgZnJvbSB0aGUgZW5kCiAgICAgICAgIHdoZW4gaW5kZXhlZAoKICAgICAgMikgY29tcGFyaXNvbiBvcGVyYXRvcnMgYXV0b21hdGljYWxseSByZW1vdmUgd2hpdGVzcGFjZSBmcm9tIHRoZQogICAgICAgICBlbmQgd2hlbiBjb21wYXJpbmcgdmFsdWVzCgogICAgICAzKSB2ZWN0b3JpemVkIHN0cmluZyBvcGVyYXRpb25zIGFyZSBwcm92aWRlZCBhcyBtZXRob2RzCiAgICAgICAgIChlLmcuIGBzdHIuZW5kc3dpdGhgKSBhbmQgaW5maXggb3BlcmF0b3JzIChlLmcuIGBgK2BgLCBgYCpgYCxgYCVgYCkKCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICBvYmogOiBhcnJheSBvZiBzdHIgb3IgdW5pY29kZS1saWtlCgogICAgaXRlbXNpemUgOiBpbnQsIG9wdGlvbmFsCiAgICAgICAgYGl0ZW1zaXplYCBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIHNjYWxhciBpbiB0aGUKICAgICAgICByZXN1bHRpbmcgYXJyYXkuICBJZiBgaXRlbXNpemVgIGlzIE5vbmUsIGFuZCBgb2JqYCBpcyBhbgogICAgICAgIG9iamVjdCBhcnJheSBvciBhIFB5dGhvbiBsaXN0LCB0aGUgYGl0ZW1zaXplYCB3aWxsIGJlCiAgICAgICAgYXV0b21hdGljYWxseSBkZXRlcm1pbmVkLiAgSWYgYGl0ZW1zaXplYCBpcyBwcm92aWRlZCBhbmQgYG9iamAKICAgICAgICBpcyBvZiB0eXBlIHN0ciBvciB1bmljb2RlLCB0aGVuIHRoZSBgb2JqYCBzdHJpbmcgd2lsbCBiZQogICAgICAgIGNodW5rZWQgaW50byBgaXRlbXNpemVgIHBpZWNlcy4KCiAgICB1bmljb2RlIDogYm9vbCwgb3B0aW9uYWwKICAgICAgICBXaGVuIHRydWUsIHRoZSByZXN1bHRpbmcgYGNoYXJhcnJheWAgY2FuIGNvbnRhaW4gVW5pY29kZQogICAgICAgIGNoYXJhY3RlcnMsIHdoZW4gZmFsc2Ugb25seSA4LWJpdCBjaGFyYWN0ZXJzLiAgSWYgdW5pY29kZSBpcwogICAgICAgIGBOb25lYCBhbmQgYG9iamAgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CgogICAgICAgICAgLSBhIGBjaGFyYXJyYXlgLAogICAgICAgICAgLSBhbiBuZGFycmF5IG9mIHR5cGUgYHN0cmAgb3IgJ3VuaWNvZGVgCiAgICAgICAgICAtIGEgUHl0aG9uIHN0ciBvciB1bmljb2RlIG9iamVjdCwKCiAgICAgICAgdGhlbiB0aGUgdW5pY29kZSBzZXR0aW5nIG9mIHRoZSBvdXRwdXQgYXJyYXkgd2lsbCBiZQogICAgICAgIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZC4KCiAgICBvcmRlciA6IHsnQycsICdGJ30sIG9wdGlvbmFsCiAgICAgICAgU3BlY2lmeSB0aGUgb3JkZXIgb2YgdGhlIGFycmF5LiAgSWYgb3JkZXIgaXMgJ0MnIChkZWZhdWx0KSwgdGhlbiB0aGUKICAgICAgICBhcnJheSB3aWxsIGJlIGluIEMtY29udGlndW91cyBvcmRlciAobGFzdC1pbmRleCB2YXJpZXMgdGhlCiAgICAgICAgZmFzdGVzdCkuICBJZiBvcmRlciBpcyAnRicsIHRoZW4gdGhlIHJldHVybmVkIGFycmF5CiAgICAgICAgd2lsbCBiZSBpbiBGb3J0cmFuLWNvbnRpZ3VvdXMgb3JkZXIgKGZpcnN0LWluZGV4IHZhcmllcyB0aGUKICAgICAgICBmYXN0ZXN0KS4KICAgIEYpA3K0AAAAco0AAABygwAAACkBcg4AAAApBHKRAAAAclcAAAByjQAAAHKDAAAAck4AAAByTgAAAHJPAAAAckQAAABGCgAAcwQAAAAAMAgBKQFyaAAAACkCcgEAAABOKQJOTikCTk4pAnIBAAAATikBcnUAAAApAnIBAAAATikCcgEAAABOKQFyaAAAACkBTikBTikCcgEAAABOKQJyAQAAAE4pAXJoAAAAKQJOTikBTikCTk4pAU4pAnIBAAAATikBTikBTikETlROTikDTk5OKVlyqgAAANoKX19mdXR1cmVfX3ICAAAAcgMAAAByBAAAAHKHAAAAWgxudW1lcmljdHlwZXNyBgAAAHIHAAAAcggAAAByCQAAAHIKAAAAcgsAAADaB251bWVyaWNyDAAAAHINAAAAcg4AAAByswAAAFoVbnVtcHkuY29yZS5tdWx0aWFycmF5cg8AAADaDG51bXB5LmNvbXBhdHIQAAAAchEAAABySQAAANoHX19hbGxfX3KJAAAAcogAAADaA3N0cnJHAAAA2gVieXRlc3KsAAAAco0AAADaA2xlbnKVAAAAclAAAAByUwAAAHJVAAAAclkAAAByEwAAAHIUAAAAchUAAAByFgAAAHIXAAAAchgAAAByGQAAAHIaAAAAchsAAAByHAAAAHIdAAAAch4AAAByHwAAAHIgAAAAciEAAAByIgAAAHIjAAAAciQAAAByJQAAAHImAAAAcicAAAByKAAAAHIpAAAAcioAAAByKwAAAHIsAAAAci0AAAByLgAAAHIvAAAAcjAAAAByMQAAAHIyAAAAcjMAAAByNAAAAHI1AAAAcjYAAAByNwAAAHI4AAAAcjkAAAByOgAAAHI7AAAAcjwAAAByPQAAAHI+AAAAcj8AAAByQAAAAHJBAAAAckIAAAByQwAAAHISAAAAckQAAAByTgAAAHJOAAAAck4AAAByTwAAANoIPG1vZHVsZT4RAAAAc64AAAAEARQCCAEgARABDAEMARABCAMKAQ4BDAEOAQ4BDAEMAQwBCAQEARABBAEGAgQBBAEEAggOCAcIEAgLCBgIGAgZCBgIGAgYCBMIGggcCBoIJgokCi4KLgojCiwKIwojChsIGAgYCBgIGQgZCBgIGQgZCiMIJAo5CCMKIAogCh0KIwgjCiUKLAoiCh0KHwowCCUIJwokCCQIHggfCB8QfwB/AH8AfwB/AH8ALwp/ABk=
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 20
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
arrayprint.cpython-37.pyc
24.12 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
cversions.cpython-37.pyc
627 B
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
defchararray.cpython-37.pyc
65.72 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
einsumfunc.cpython-37.pyc
26.91 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
fromnumeric.cpython-37.pyc
95.70 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
function_base.cpython-37.pyc
10.68 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
generate_numpy_api.cpython-37.pyc
6.17 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
getlimits.cpython-37.pyc
13.52 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
info.cpython-37.pyc
4.78 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
machar.cpython-37.pyc
7.52 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
memmap.cpython-37.pyc
9.92 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
numeric.cpython-37.pyc
85.29 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
numerictypes.cpython-37.pyc
23.35 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
records.cpython-37.pyc
21.76 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup.cpython-37.pyc
21.43 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup_common.cpython-37.pyc
9.63 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
shape_base.cpython-37.pyc
18.88 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_internal.cpython-37.pyc
17.55 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_methods.cpython-37.pyc
3.55 KB
lrw-r--r--
2023-04-24 19:38:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
2.34 KB
lrw-r--r--
2023-04-24 19:38:35
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).