REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 31.75 KB
Close
/usr/lib/python3.6/site-packages/pip/_vendor/__pycache__/distro.cpython-36.pyc
Text
Base64
Mw0NCt1QEWbNlQAA4wAAAAAAAAAAAAAAAAUAAABAAAAAc2IBAABkAFoAZAFkAmwBWgFkAWQCbAJaAmQBZAJsA1oDZAFkAmwEWgRkAWQCbAVaBWQBZAJsBloGZAFkAmwHWgdlA2oIaglkA4MBc1hlCmQEagtlA2oIgwGDAYIBZAVaDGQGWg1pAFoOZAdkCGQJnAJaD2QKZAhpAVoQZQJqEWQLgwFaEmUCahFkDIMBWhNkDWQOZA9lDWQQZgVaFGQ6ZBJkE4QBWhVkFGQVhABaFmQ7ZBdkGIQBWhdkPGQZZBqEAVoYZD1kG2QchAFaGWQ+ZB1kHoQBWhpkP2QfZCCEAVobZEBkIWQihAFaHGQjZCSEAFodZCVkJoQAWh5kQWQnZCiEAVofZClkKoQAWiBkK2QshABaIWQtZC6EAFoiZC9kMIQAWiNkMWQyhABaJGQzZDSEAFolRwBkNWQ2hABkNmUmgwNaJ2UngwBaKGQ3ZDiEAFopZSpkOWsCkAFyXmUpgwABAGQCUwApQmEsAwAAClRoZSBgYGRpc3Ryb2BgIHBhY2thZ2UgKGBgZGlzdHJvYGAgc3RhbmRzIGZvciBMaW51eCBEaXN0cmlidXRpb24pIHByb3ZpZGVzCmluZm9ybWF0aW9uIGFib3V0IHRoZSBMaW51eCBkaXN0cmlidXRpb24gaXQgcnVucyBvbiwgc3VjaCBhcyBhIHJlbGlhYmxlCm1hY2hpbmUtcmVhZGFibGUgZGlzdHJvIElELCBvciB2ZXJzaW9uIGluZm9ybWF0aW9uLgoKSXQgaXMgYSByZW5ld2VkIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIGZvciBQeXRob24ncyBvcmlnaW5hbAo6cHk6ZnVuYzpgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uYCBmdW5jdGlvbiwgYnV0IGl0IHByb3ZpZGVzIG11Y2ggbW9yZQpmdW5jdGlvbmFsaXR5LiBBbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBiZWNhbWUgbmVjZXNzYXJ5IGJlY2F1c2UgUHl0aG9uCjMuNSBkZXByZWNhdGVkIHRoaXMgZnVuY3Rpb24sIGFuZCBQeXRob24gMy43IGlzIGV4cGVjdGVkIHRvIHJlbW92ZSBpdAphbHRvZ2V0aGVyLiBJdHMgcHJlZGVjZXNzb3IgZnVuY3Rpb24gOnB5OmZ1bmM6YHBsYXRmb3JtLmRpc3RgIHdhcyBhbHJlYWR5CmRlcHJlY2F0ZWQgc2luY2UgUHl0aG9uIDIuNiBhbmQgaXMgYWxzbyBleHBlY3RlZCB0byBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjcuClN0aWxsLCB0aGVyZSBhcmUgbWFueSBjYXNlcyBpbiB3aGljaCBhY2Nlc3MgdG8gTGludXggZGlzdHJpYnV0aW9uIGluZm9ybWF0aW9uCmlzIG5lZWRlZC4gU2VlIGBQeXRob24gaXNzdWUgMTMyMiA8aHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzIyPmBfIGZvcgptb3JlIGluZm9ybWF0aW9uLgrpAAAAAE7aBWxpbnV4ehlVbnN1cHBvcnRlZCBwbGF0Zm9ybTogezB9egQvZXRjegpvcy1yZWxlYXNlWgZvcmFjbGVaBHJoZWwpAloUZW50ZXJwcmlzZWVudGVycHJpc2VaG3JlZGhhdGVudGVycHJpc2V3b3Jrc3RhdGlvbloGcmVkaGF0ekEoPzpbXildKlwpKC4qKVwoKT8gKig/OlNUTCApPyhbXGQuK1wtYS16XSpcZCkgKig/OmVzYWVsZXIgKik/KC4rKXobKFx3KylbLV9dKHJlbGVhc2V8dmVyc2lvbikkWg5kZWJpYW5fdmVyc2lvbnoLbHNiLXJlbGVhc2V6C29lbS1yZWxlYXNleg5zeXN0ZW0tcmVsZWFzZVRjAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAHQAagF8AIMBUwApAWEkBAAACiAgICBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgTGludXggZGlzdHJpYnV0aW9uIGFzIGEgdHVwbGUKICAgIGBgKGlkX25hbWUsIHZlcnNpb24sIGNvZGVuYW1lKWBgIHdpdGggaXRlbXMgYXMgZm9sbG93czoKCiAgICAqIGBgaWRfbmFtZWBgOiAgSWYgKmZ1bGxfZGlzdHJpYnV0aW9uX25hbWUqIGlzIGZhbHNlLCB0aGUgcmVzdWx0IG9mCiAgICAgIDpmdW5jOmBkaXN0cm8uaWRgLiBPdGhlcndpc2UsIHRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5uYW1lYC4KCiAgICAqIGBgdmVyc2lvbmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gLgoKICAgICogYGBjb2RlbmFtZWBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmNvZGVuYW1lYC4KCiAgICBUaGUgaW50ZXJmYWNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcmlnaW5hbAogICAgOnB5OmZ1bmM6YHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbmAgZnVuY3Rpb24sIHN1cHBvcnRpbmcgYSBzdWJzZXQgb2YKICAgIGl0cyBwYXJhbWV0ZXJzLgoKICAgIFRoZSBkYXRhIGl0IHJldHVybnMgbWF5IG5vdCBleGFjdGx5IGJlIHRoZSBzYW1lLCBiZWNhdXNlIGl0IHVzZXMgbW9yZSBkYXRhCiAgICBzb3VyY2VzIHRoYW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLCBhbmQgdGhhdCBtYXkgbGVhZCB0byBkaWZmZXJlbnQgZGF0YSBpZgogICAgdGhlIExpbnV4IGRpc3RyaWJ1dGlvbiBpcyBub3QgY29uc2lzdGVudCBhY3Jvc3MgbXVsdGlwbGUgZGF0YSBzb3VyY2VzIGl0CiAgICBwcm92aWRlcyAodGhlcmUgYXJlIGluZGVlZCBzdWNoIGRpc3RyaWJ1dGlvbnMgLi4uKS4KCiAgICBBbm90aGVyIHJlYXNvbiBmb3IgZGlmZmVyZW5jZXMgaXMgdGhlIGZhY3QgdGhhdCB0aGUgOmZ1bmM6YGRpc3Ryby5pZGAKICAgIG1ldGhvZCBub3JtYWxpemVzIHRoZSBkaXN0cm8gSUQgc3RyaW5nIHRvIGEgcmVsaWFibGUgbWFjaGluZS1yZWFkYWJsZSB2YWx1ZQogICAgZm9yIGEgbnVtYmVyIG9mIHBvcHVsYXIgTGludXggZGlzdHJpYnV0aW9ucy4KICAgICkC2gdfZGlzdHJv2hJsaW51eF9kaXN0cmlidXRpb24pAdoWZnVsbF9kaXN0cmlidXRpb25fbmFtZakAcgYAAAD6HC91c3IvbGliL3B5dGhvbjMuNi9kaXN0cm8ucHlyBAAAAGAAAABzAgAAAAAZcgQAAABjAAAAAAAAAAAAAAAAAQAAAEMAAABzCAAAAHQAagGDAFMAKQFh3QoAAAogICAgUmV0dXJuIHRoZSBkaXN0cm8gSUQgb2YgdGhlIGN1cnJlbnQgTGludXggZGlzdHJpYnV0aW9uLCBhcyBhCiAgICBtYWNoaW5lLXJlYWRhYmxlIHN0cmluZy4KCiAgICBGb3IgYSBudW1iZXIgb2YgTGludXggZGlzdHJpYnV0aW9ucywgdGhlIHJldHVybmVkIGRpc3RybyBJRCB2YWx1ZSBpcwogICAgKnJlbGlhYmxlKiwgaW4gdGhlIHNlbnNlIHRoYXQgaXQgaXMgZG9jdW1lbnRlZCBhbmQgdGhhdCBpdCBkb2VzIG5vdCBjaGFuZ2UKICAgIGFjcm9zcyByZWxlYXNlcyBvZiB0aGUgZGlzdHJpYnV0aW9uLgoKICAgIFRoaXMgcGFja2FnZSBtYWludGFpbnMgdGhlIGZvbGxvd2luZyByZWxpYWJsZSBkaXN0cm8gSUQgdmFsdWVzOgoKICAgID09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgRGlzdHJvIElEICAgICAgIERpc3RyaWJ1dGlvbgogICAgPT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAidWJ1bnR1IiAgICAgICAgVWJ1bnR1CiAgICAiZGViaWFuIiAgICAgICAgRGViaWFuCiAgICAicmhlbCIgICAgICAgICAgUmVkSGF0IEVudGVycHJpc2UgTGludXgKICAgICJjZW50b3MiICAgICAgICBDZW50T1MKICAgICJmZWRvcmEiICAgICAgICBGZWRvcmEKICAgICJzbGVzIiAgICAgICAgICBTVVNFIExpbnV4IEVudGVycHJpc2UgU2VydmVyCiAgICAib3BlbnN1c2UiICAgICAgb3BlblNVU0UKICAgICJhbWF6b24iICAgICAgICBBbWF6b24gTGludXgKICAgICJhcmNoIiAgICAgICAgICBBcmNoIExpbnV4CiAgICAiY2xvdWRsaW51eCIgICAgQ2xvdWRMaW51eCBPUwogICAgImV4aGVyYm8iICAgICAgIEV4aGVyYm8gTGludXgKICAgICJnZW50b28iICAgICAgICBHZW5Ub28gTGludXgKICAgICJpYm1fcG93ZXJrdm0iICBJQk0gUG93ZXJLVk0KICAgICJrdm1pYm0iICAgICAgICBLVk0gZm9yIElCTSB6IFN5c3RlbXMKICAgICJsaW51eG1pbnQiICAgICBMaW51eCBNaW50CiAgICAibWFnZWlhIiAgICAgICAgTWFnZWlhCiAgICAibWFuZHJpdmEiICAgICAgTWFuZHJpdmEgTGludXgKICAgICJwYXJhbGxlbHMiICAgICBQYXJhbGxlbHMKICAgICJwaWRvcmEiICAgICAgICBQaWRvcmEKICAgICJyYXNwYmlhbiIgICAgICBSYXNwYmlhbgogICAgIm9yYWNsZSIgICAgICAgIE9yYWNsZSBMaW51eCAoYW5kIE9yYWNsZSBFbnRlcnByaXNlIExpbnV4KQogICAgInNjaWVudGlmaWMiICAgIFNjaWVudGlmaWMgTGludXgKICAgICJzbGFja3dhcmUiICAgICBTbGFja3dhcmUKICAgICJ4ZW5zZXJ2ZXIiICAgICBYZW5TZXJ2ZXIKICAgID09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgIElmIHlvdSBoYXZlIGEgbmVlZCB0byBnZXQgZGlzdHJvcyBmb3IgcmVsaWFibGUgSURzIGFkZGVkIGludG8gdGhpcyBzZXQsCiAgICBvciBpZiB5b3UgZmluZCB0aGF0IHRoZSA6ZnVuYzpgZGlzdHJvLmlkYCBmdW5jdGlvbiByZXR1cm5zIGEgZGlmZmVyZW50CiAgICBkaXN0cm8gSUQgZm9yIG9uZSBvZiB0aGUgbGlzdGVkIGRpc3Ryb3MsIHBsZWFzZSBjcmVhdGUgYW4gaXNzdWUgaW4gdGhlCiAgICBgZGlzdHJvIGlzc3VlIHRyYWNrZXJgXy4KCiAgICAqKkxvb2t1cCBoaWVyYXJjaHkgYW5kIHRyYW5zZm9ybWF0aW9uczoqKgoKICAgIEZpcnN0LCB0aGUgSUQgaXMgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5nIHNvdXJjZXMsIGluIHRoZSBzcGVjaWZpZWQKICAgIG9yZGVyLiBUaGUgZmlyc3QgYXZhaWxhYmxlIGFuZCBub24tZW1wdHkgdmFsdWUgaXMgdXNlZDoKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIklEIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIkRpc3RyaWJ1dG9yIElEIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkgdGhlIGxzYl9yZWxlYXNlCiAgICAgIGNvbW1hbmQsCgogICAgKiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZmlsZSBuYW1lIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLAoKICAgIFRoZSBzbyBkZXRlcm1pbmVkIElEIHZhbHVlIHRoZW4gcGFzc2VzIHRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtYXRpb25zLAogICAgYmVmb3JlIGl0IGlzIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kOgoKICAgICogaXQgaXMgdHJhbnNsYXRlZCB0byBsb3dlciBjYXNlLAoKICAgICogYmxhbmtzICh3aGljaCBzaG91bGQgbm90IGJlIHRoZXJlIGFueXdheSkgYXJlIHRyYW5zbGF0ZWQgdG8gdW5kZXJzY29yZXMsCgogICAgKiBhIG5vcm1hbGl6YXRpb24gb2YgdGhlIElEIGlzIHBlcmZvcm1lZCwgYmFzZWQgdXBvbgogICAgICBgbm9ybWFsaXphdGlvbiB0YWJsZXNgXy4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBub3JtYWxpemF0aW9uIGlzIHRvIGVuc3VyZQogICAgICB0aGF0IHRoZSBJRCBpcyBhcyByZWxpYWJsZSBhcyBwb3NzaWJsZSwgZXZlbiBhY3Jvc3MgaW5jb21wYXRpYmxlIGNoYW5nZXMKICAgICAgaW4gdGhlIExpbnV4IGRpc3RyaWJ1dGlvbnMuIEEgY29tbW9uIHJlYXNvbiBmb3IgYW4gaW5jb21wYXRpYmxlIGNoYW5nZSBpcwogICAgICB0aGUgYWRkaXRpb24gb2YgYW4gb3MtcmVsZWFzZSBmaWxlLCBvciB0aGUgYWRkaXRpb24gb2Yg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aWRlIHZlcnNpb24gbnVtYmVycyB3aXRoIGRpZmZlcmVudCBwcmVjaXNpb25zIGluCiAgICB0aGUgZGlmZmVyZW50IHNvdXJjZXMgb2YgZGlzdHJpYnV0aW9uIGluZm9ybWF0aW9uLiBFeGFtaW5pbmcgdGhlIGRpZmZlcmVudAogICAgc291cmNlcyBpbiBhIGZpeGVkIHByaW9yaXR5IG9yZGVyIGRvZXMgbm90IGFsd2F5cyB5aWVsZCB0aGUgbW9zdCBwcmVjaXNlCiAgICB2ZXJzaW9uIChlLmcuIGZvciBEZWJpYW4gOC4yLCBvciBDZW50T1MgNy4xKS4KCiAgICBUaGUgKmJlc3QqIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBhcHByb2FjaCBmb3IgdGhlIHJldHVybmVkCiAgICB2ZXJzaW9uOgoKICAgIElmICpiZXN0KiBpcyBmYWxzZSwgdGhlIGZpcnN0IG5vbi1lbXB0eSB2ZXJzaW9uIG51bWJlciBpbiBwcmlvcml0eSBvcmRlciBvZgogICAgdGhlIGV4YW1pbmVkIHNvdXJjZXMgaXMgcmV0dXJuZWQuCgogICAgSWYgKmJlc3QqIGlzIHRydWUsIHRoZSBtb3N0IHByZWNpc2UgdmVyc2lvbiBudW1iZXIgb3V0IG9mIGFsbCBleGFtaW5lZAogICAgc291cmNlcyBpcyByZXR1cm5lZC4KCiAgICAqKkxvb2t1cCBoaWVyYXJjaHk6KioKCiAgICBJbiBhbGwgY2FzZXMsIHRoZSB2ZXJzaW9uIG51bWJlciBpcyBvYnRhaW5lZCBmcm9tIHRoZSBmb2xsb3dpbmcgc291cmNlcy4KICAgIElmICpiZXN0KiBpcyBmYWxzZSwgdGhpcyBvcmRlciByZXByZXNlbnRzIHRoZSBwcmlvcml0eSBvcmRlcjoKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIlZFUlNJT05fSUQiIGF0dHJpYnV0ZSBvZiB0aGUgb3MtcmVsZWFzZSBmaWxlLAogICAgKiB0aGUgdmFsdWUgb2YgdGhlICJSZWxlYXNlIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkgdGhlIGxzYl9yZWxlYXNlCiAgICAgIGNvbW1hbmQsCiAgICAqIHRoZSB2ZXJzaW9uIG51bWJlciBwYXJzZWQgZnJvbSB0aGUgIjx2ZXJzaW9uX2lkPiIgZmllbGQgb2YgdGhlIGZpcnN0IGxpbmUKICAgICAgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUsCiAgICAqIHRoZSB2ZXJzaW9uIG51bWJlciBwYXJzZWQgZnJvbSB0aGUgIlBSRVRUWV9OQU1FIiBhdHRyaWJ1dGUgb2YgdGhlCiAgICAgIG9zLXJlbGVhc2UgZmlsZSwgaWYgaXQgZm9sbG93cyB0aGUgZm9ybWF0IG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlcy4KICAgICogdGhlIHZlcnNpb24gbnVtYmVyIHBhcnNlZCBmcm9tIHRoZSAiRGVzY3JpcHRpb24iIGF0dHJpYnV0ZSByZXR1cm5lZCBieQogICAgICB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCwgaWYgaXQgZm9sbG93cyB0aGUgZm9ybWF0IG9mIHRoZSBkaXN0cm8gcmVsZWFzZQogICAgICBmaWxlcy4KICAgICkCcgMAAADaB3ZlcnNpb24pAnIKAAAA2gRiZXN0cgYAAAByBgAAAHIHAAAAcgsAAADuAAAAcwIAAAAAKXILAAAAYwEAAAAAAAAAAQAAAAIAAABDAAAAcwoAAAB0AGoBfACDAVMAKQFhowEAAAogICAgUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IExpbnV4IGRpc3RyaWJ1dGlvbiBhcyBhIHR1cGxlCiAgICBgYChtYWpvciwgbWlub3IsIGJ1aWxkX251bWJlcilgYCB3aXRoIGl0ZW1zIGFzIGZvbGxvd3M6CgogICAgKiBgYG1ham9yYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubWFqb3JfdmVyc2lvbmAuCgogICAgKiBgYG1pbm9yYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubWlub3JfdmVyc2lvbmAuCgogICAgKiBgYGJ1aWxkX251bWJlcmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmJ1aWxkX251bWJlcmAuCgogICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlICpiZXN0KiBwYXJhbWV0ZXIsIHNlZSB0aGUgOmZ1bmM6YGRpc3Ryby52ZXJzaW9uYAogICAgbWV0aG9kLgogICAgKQJyAwAAANoNdmVyc2lvbl9wYXJ0cykBcgwAAAByBgAAAHIGAAAAcgcAAAByDQAAABoBAABzAgAAAAAOcg0AAABjAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAHQAagF8AIMBUwApAWE4AQAACiAgICBSZXR1cm4gdGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgTGludXggZGlzdHJpYnV0aW9uLCBhcyBhIHN0cmluZywKICAgIGlmIHByb3ZpZGVkLgogICAgT3RoZXJ3aXNlLCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLiBUaGUgbWFqb3IgdmVyc2lvbiBpcyB0aGUgZmlyc3QKICAgIHBhcnQgb2YgdGhlIGRvdC1zZXBhcmF0ZWQgdmVyc2lvbiBzdHJpbmcuCgogICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlICpiZXN0KiBwYXJhbWV0ZXIsIHNlZSB0aGUgOmZ1bmM6YGRpc3Ryby52ZXJzaW9uYAogICAgbWV0aG9kLgogICAgKQJyAwAAANoNbWFqb3JfdmVyc2lvbikBcgwAAAByBgAAAHIGAAAAcgcAAAByDgAAACsBAABzAgAAAAAKcg4AAABjAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAHQAagF8AIMBUwApAWE5AQAACiAgICBSZXR1cm4gdGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgTGludXggZGlzdHJpYnV0aW9uLCBhcyBhIHN0cmluZywKICAgIGlmIHByb3ZpZGVkLgogICAgT3RoZXJ3aXNlLCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLiBUaGUgbWlub3IgdmVyc2lvbiBpcyB0aGUgc2Vjb25kCiAgICBwYXJ0IG9mIHRoZSBkb3Qtc2VwYXJhdGVkIHZlcnNpb24gc3RyaW5nLgoKICAgIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSAqYmVzdCogcGFyYW1ldGVyLCBzZWUgdGhlIDpmdW5jOmBkaXN0cm8udmVyc2lvbmAKICAgIG1ldGhvZC4KICAgICkCcgMAAADaDW1pbm9yX3ZlcnNpb24pAXIMAAAAcgYAAAByBgAAAHIHAAAAcg8AAAA4AQAAcwIAAAAACnIPAAAAYwEAAAAAAAAAAQAAAAIAAABDAAAAcwoAAAB0AGoBfACDAVMAKQFhNgEAAAogICAgUmV0dXJuIHRoZSBidWlsZCBudW1iZXIgb2YgdGhlIGN1cnJlbnQgTGludXggZGlzdHJpYnV0aW9uLCBhcyBhIHN0cmluZywKICAgIGlmIHByb3ZpZGVkLgogICAgT3RoZXJ3aXNlLCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLiBUaGUgYnVpbGQgbnVtYmVyIGlzIHRoZSB0aGlyZCBwYXJ0CiAgICBvZiB0aGUgZG90LXNlcGFyYXRlZCB2ZXJzaW9uIHN0cmluZy4KCiAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgKmJlc3QqIHBhcmFtZXRlciwgc2VlIHRoZSA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gCiAgICBtZXRob2QuCiAgICApAnIDAAAA2gxidWlsZF9udW1iZXIpAXIMAAAAcgYAAAByBgAAAHIHAAAAchAAAABFAQAAcwIAAAAACnIQAAAAYwAAAAAAAAAAAAAAAAEAAABDAAAAcwgAAAB0AGoBgwBTACkBYRICAAAKICAgIFJldHVybiBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGRpc3RybyBJRHMgb2YgZGlzdHJpYnV0aW9ucyB0aGF0IGFyZQogICAgY2xvc2VseSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IExpbnV4IGRpc3RyaWJ1dGlvbiBpbiByZWdhcmRzIHRvIHBhY2thZ2luZwogICAgYW5kIHByb2dyYW1taW5nIGludGVyZmFjZXMsIGZvciBleGFtcGxlIGRpc3RyaWJ1dGlvbnMgdGhlIGN1cnJlbnQKICAgIGRpc3RyaWJ1dGlvbiBpcyBhIGRlcml2YXRpdmUgZnJvbS4KCiAgICAqKkxvb2t1cCBoaWVyYXJjaHk6KioKCiAgICBUaGlzIGluZm9ybWF0aW9uIGl0ZW0gaXMgb25seSBwcm92aWRlZCBieSB0aGUgb3MtcmVsZWFzZSBmaWxlLgogICAgRm9yIGRldGFpbHMsIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlICJJRF9MSUtFIiBhdHRyaWJ1dGUgaW4gdGhlCiAgICBgb3MtcmVsZWFzZSBtYW4gcGFnZQogICAgPGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3N5c3RlbWQvbWFuL29zLXJlbGVhc2UuaHRtbD5gXy4KICAgICkCcgMAAADaBGxpa2VyBgAAAHIGAAAAcgYAAAByBwAAAHIRAAAAUgEAAHMCAAAAAA5yEQAAAGMAAAAAAAAAAAAAAAABAAAAQwAAAHMIAAAAdABqAYMAUwApAWGpAgAACiAgICBSZXR1cm4gdGhlIGNvZGVuYW1lIGZvciB0aGUgcmVsZWFzZSBvZiB0aGUgY3VycmVudCBMaW51eCBkaXN0cmlidXRpb24sCiAgICBhcyBhIHN0cmluZy4KCiAgICBJZiB0aGUgZGlzdHJpYnV0aW9uIGRvZXMgbm90IGhhdmUgYSBjb2RlbmFtZSwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgoKICAgIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgY29kZW5hbWUgaXMgbm90IGFsd2F5cyByZWFsbHkgYSBjb2RlbmFtZS4gRm9yCiAgICBleGFtcGxlLCBvcGVuU1VTRSByZXR1cm5zICJ4ODZfNjQiLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBzdWNoCiAgICBjYXNlcyBpbiBhbnkgc3BlY2lhbCB3YXkgYW5kIGp1c3QgcmV0dXJucyB0aGUgc3RyaW5nIGl0IGZpbmRzLCBpZiBhbnkuCgogICAgKipMb29rdXAgaGllcmFyY2h5OioqCgogICAgKiB0aGUgY29kZW5hbWUgd2l0aGluIHRoZSAiVkVSU0lPTiIgYXR0cmlidXRlIG9mIHRoZSBvcy1yZWxlYXNlIGZpbGUsIGlmCiAgICAgIHByb3ZpZGVkLAoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiQ29kZW5hbWUiIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgY29tbWFuZCwKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIjxjb2RlbmFtZT4iIGZpZWxkIG9mIHRo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CiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24gaXRlbXMKICAgIGZyb20gdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQgZGF0YSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgTGludXggZGlzdHJpYnV0aW9uLgoKICAgIFNlZSBgbHNiX3JlbGVhc2UgY29tbWFuZCBvdXRwdXRgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbgogICAgaXRlbXMuCiAgICApAnIDAAAA2hBsc2JfcmVsZWFzZV9pbmZvcgYAAAByBgAAAHIGAAAAcgcAAAByFQAAALEBAABzAgAAAAAIchUAAABjAAAAAAAAAAAAAAAAAQAAAEMAAABzCAAAAHQAagGDAFMAKQF67QogICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgdGhlIGluZm9ybWF0aW9uIGl0ZW1zCiAgICBmcm9tIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlIGRhdGEgc291cmNlIG9mIHRoZSBjdXJyZW50IExpbnV4IGRpc3RyaWJ1dGlvbi4KCiAgICBTZWUgYGRpc3RybyByZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbiBpdGVtcy4KICAgICkCcgMAAADaE2Rpc3Ryb19yZWxlYXNlX2luZm9yBgAAAHIGAAAAcgYAAAByBwAAAHIWAAAAvAEAAHMCAAAAAAdyFgAAAGMBAAAAAAAAAAEAAAACAAAAQwAAAHMKAAAAdABqAXwAgwFTACkBYZYBAAAKICAgIFJldHVybiBhIHNpbmdsZSBuYW1lZCBpbmZvcm1hdGlvbiBpdGVtIGZyb20gdGhlIG9zLXJlbGVhc2UgZmlsZSBkYXRhIHNvdXJjZQogICAgb2YgdGhlIGN1cnJlbnQgTGludXggZGlzdHJpYnV0aW9uLgoKICAgIFBhcmFtZXRlcnM6CgogICAgKiBgYGF0dHJpYnV0ZWBgIChzdHJpbmcpOiBLZXkgb2YgdGhlIGluZm9ybWF0aW9uIGl0ZW0uCgog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IGluaXRpYWxpemF0aW9uIGFyZ3VtZW50cywgdGhhdCBpcyB1c2VkIGJ5IHRoZQogICAgYGNvbnNvbGlkYXRlZCBhY2Nlc3NvciBmdW5jdGlvbnNgXyBhbmQgYHNpbmdsZSBzb3VyY2UgYWNjZXNzb3IgZnVuY3Rpb25zYF8uCiAgICBCeSB1c2luZyBkZWZhdWx0IGluaXRpYWxpemF0aW9uIGFyZ3VtZW50cywgdGhhdCBtb2R1bGUtZ2xvYmFsIGluc3RhbmNlCiAgICByZXR1cm5zIGRhdGEgYWJvdXQgdGhlIGN1cnJlbnQgTGludXggZGlzdHJpYnV0aW9uIChpLmUuIHRoZSBkaXN0cm8gdGhpcwogICAgcGFja2FnZSBydW5zIG9uKS4KCiAgICBOb3JtYWxseSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjcmVhdGUgYWRkaXRpb25hbCBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcy4KICAgIEhvd2V2ZXIsIGluIHNpdHVhdGlvbnMgd2hlcmUgY29udHJvbCBpcyBuZWVkZWQgb3ZlciB0aGUgZXhhY3QgZGF0YSBzb3VyY2VzCiAgICB0aGF0IGFyZSB1c2VkLCBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjYW4gYmUgY3JlYXRlZCB3aXRoIGEgc3BlY2lmaWMKICAgIGRpc3RybyByZWxlYXNlIGZpbGUsIG9yIGEgc3BlY2lmaWMgb3MtcmVsZWFzZSBmaWxlLCBvciB3aXRob3V0IGludm9raW5nIHRoZQogICAgbHNiX3JlbGVhc2UgY29tbWFuZC4KICAgIFTaAGMEAAAAAAAAAAQAAAADAAAAQwAAAHNIAAAAfAJwEHQAagFqAnQDdASDAnwAXwV8A3AaZAF8AF8GfABqB4MAfABfCHwBcjR8AGoJgwBuAmkAfABfCnwAaguDAHwAXwxkAlMAKQNhOAkAAAogICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiBtZXRob2Qgb2YgdGhpcyBjbGFzcyBnYXRoZXJzIGluZm9ybWF0aW9uIGZyb20gdGhlCiAgICAgICAgYXZhaWxhYmxlIGRhdGEgc291cmNlcywgYW5kIHN0b3JlcyB0aGF0IGluIHByaXZhdGUgaW5zdGFuY2UgYXR0cmlidXRlcy4KICAgICAgICBTdWJzZXF1ZW50IGFjY2VzcyB0byB0aGUgaW5mb3JtYXRpb24gaXRlbXMgdXNlcyB0aGVzZSBwcml2YXRlIGluc3RhbmNlCiAgICAgICAgYXR0cmlidXRlcywgc28gdGhhdCB0aGUgZGF0YSBzb3VyY2VzIGFyZSByZWFkIG9ubHkgb25jZS4KCiAgICAgICAgUGFyYW1ldGVyczoKCiAgICAgICAgKiBgYGluY2x1ZGVfbHNiYGAgKGJvb2wpOiBDb250cm9scyB3aGV0aGVyIHRoZQogICAgICAgICAgYGxzYl9yZWxlYXNlIGNvbW1hbmQgb3V0cHV0YF8gaXMgaW5jbHVkZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgICBJZiB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbgogICAgICAgICAgcGF0aCwgdGhlIGRhdGEgc291cmNlIGZvciB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCB3aWxsIGJlIGVtcHR5LgoKICAgICAgICAqIGBgb3NfcmVsZWFzZV9maWxlYGAgKHN0cmluZyk6IFRoZSBwYXRoIG5hbWUgb2YgdGhlCiAgICAgICAgICBgb3MtcmVsZWFzZSBmaWxlYF8gdGhhdCBpcyB0byBiZSB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuCgogICAgICAgICAgQW4gZW1wdHkgc3RyaW5nICh0aGUgZGVmYXVsdCkgd2lsbCBjYXVzZSB0aGUgZGVmYXVsdCBwYXRoIG5hbWUgdG8KICAgICAgICAgIGJlIHVzZWQgKHNlZSBgb3MtcmVsZWFzZSBmaWxlYF8gZm9yIGRldGFpbHMpLgoKICAgICAgICAgIElmIHRoZSBzcGVjaWZpZWQgb3IgZGVmYXVsdGVkIG9zLXJlbGVhc2UgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlCiAgICAgICAgICBkYXRhIHNvdXJjZSBmb3IgdGhlIG9zLXJlbGVhc2UgZmlsZSB3aWxsIGJlIGVtcHR5LgoKICAgICAgICAqIGBgZGlzdHJvX3JlbGVhc2VfZmlsZWBgIChzdHJpbmcpOiBUaGUgcGF0aCBuYW1lIG9mIHRoZQogICAgICAgICAgYGRpc3RybyByZWxlYXNlIGZpbGVgXyB0aGF0IGlzIHRvIGJlIHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgICBBbiBlbXB0eSBzdHJpbmcgKHRoZSBkZWZhdWx0KSB3aWxsIGNhdXNlIGEgZGVmYXVsdCBzZWFyY2ggYWxnb3JpdGhtCiAgICAgICAgICB0byBiZSB1c2VkIChzZWUgYGRpc3RybyByZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscykuCgogICAgICAgICAgSWYgdGhlIHNwZWNpZmllZCBkaXN0cm8gcmVsZWFzZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBvciBpZiBubyBkZWZhdWx0CiAgICAgICAgICBkaXN0cm8gcmVsZWFzZSBmaWxlIGNhbiBiZSBmb3VuZCwgdGhlIGRhdGEgc291cmNlIGZvciB0aGUgZGlzdHJvCiAgICAgICAgICByZWxlYXNlIGZpbGUgd2lsbCBiZSBlbXB0eS4KCiAgICAgICAgUHVibGljIGluc3RhbmNlIGF0dHJpYnV0ZXM6CgogICAgICAgICogYGBvc19yZWxlYXNlX2ZpbGVgYCAoc3RyaW5nKTogVGhlIHBhdGggbmFtZSBvZiB0aGUKICAgICAgICAgIGBvcy1yZWxlYXNlIGZpbGVgXyB0aGF0IGlzIGFjdHVhbGx5IHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4gVGhlCiAgICAgICAgICBlbXB0eSBzdHJpbmcgaWYgbm8gZGlzdHJvIHJlbGVhc2UgZmlsZSBpcyB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuCgogICAgICAgICogYGBkaXN0cm9fcmVsZWFzZV9maWxlYGAgKHN0cmluZyk6IFRoZSBwYXRoIG5hbWUgb2YgdGhlCiAgICAgICAgICBgZGlzdHJvIHJlbGVhc2UgZmlsZWBfIHRoYXQgaXMgYWN0dWFsbHkgdXNlZCBhcyBhIGRhdGEgc291cmNlLiBUaGUKICAgICAgICAgIGVtcHR5IHN0cmluZyBpZiBubyBkaXN0cm8gcmVsZWFzZSBmaWxlIGlzIHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgUmFpc2VzOgoKICAgICAgICAqIDpweTpleGM6YElPRXJyb3JgOiBTb21lIEkvTyBpc3N1ZSB3aXRoIGFuIG9zLXJlbGVhc2UgZmlsZSBvciBkaXN0cm8KICAgICAgICAgIHJlbGVhc2UgZmlsZS4KCiAgICAgICAgKiA6cHk6ZXhjOmBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcmA6IFRoZSBsc2JfcmVsZWFzZSBjb21tYW5kIGhhZAogICAgICAgICAgc29tZSBpc3N1ZSAob3RoZXIgdGhhbiBub3QgYmVpbmcgYXZhaWxhYmxlIGluIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbgogICAgICAgICAgcGF0aCkuCgogICAgICAgICogOnB5OmV4YzpgVW5pY29kZUVycm9yYDogQSBkYXRhIHNvdXJjZSBoYXMgdW5leHBlY3RlZCBjaGFyYWN0ZXJzIG9yCiAgICAgICAgICB1c2VzIGFuIHVuZXhwZWN0ZWQgZW5jb2RpbmcuCiAgICAgICAgchwAAABOKQ3aAm9z2gRwYXRo2gRqb2lu2gxfVU5JWENPTkZESVLaFF9PU19SRUxFQVNFX0JBU0VOQU1F2g9vc19yZWxlYXNlX2ZpbGXaE2Rpc3Ryb19yZWxlYXNlX2ZpbGXaFF9nZXRfb3NfcmVsZWFzZV9pbmZv2hBfb3NfcmVsZWFzZV9pbmZv2hVfZ2V0X2xzYl9yZWxlYXNlX2luZm/aEV9sc2JfcmVsZWFzZV9pbmZv2hhfZ2V0X2Rpc3Ryb19yZWxlYXNlX2luZm/aFF9kaXN0cm9fcmVsZWFzZV9pbmZvKQTaBHNlbGZaC2luY2x1ZGVfbHNiciIAAAByIwAAAHIGAAAAcgYAAAByBwAAANoIX19pbml0X18SAgAAcwwAAAAAOwQBEAEKAQoCEgF6GkxpbnV4RGlzdHJpYnV0aW9uLl9faW5pdF9fYwEAAAAAAAAAAQAAAAYAAABDAAAAcxwAAABkAWoAfABqAXwAagJ8AGoDfABqBHwAagWDBVMAKQJ6IFJldHVybiByZXByIG9mIGFsbCBpbmZvCiAgICAgICAgepBMaW51eERpc3RyaWJ1dGlvbihvc19yZWxlYXNlX2ZpbGU9ezAhcn0sIGRpc3Ryb19yZWxlYXNlX2ZpbGU9ezEh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AAAAAQAAAEMAAABzBgAAAHwAagBTACkBetwKICAgICAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24KICAgICAgICBpdGVtcyBmcm9tIHRoZSBvcy1yZWxlYXNlIGZpbGUgZGF0YSBzb3VyY2Ugb2YgdGhlIExpbnV4IGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLm9zX3JlbGVhc2VfaW5mb2AuCiAgICAgICAgKQFyJQAAACkBcioAAAByBgAAAHIGAAAAcgcAAAByFAAAAAwDAABzAgAAAAAHeiFMaW51eERpc3RyaWJ1dGlvbi5vc19yZWxlYXNlX2luZm9jAQAAAAAAAAABAAAAAQAAAEMAAABzBgAAAHwAagBTACkBeukKICAgICAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24KICAgICAgICBpdGVtcyBmcm9tIHRoZSBsc2JfcmVsZWFzZSBjb21tYW5kIGRhdGEgc291cmNlIG9mIHRoZSBMaW51eAogICAgICAgIGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLmxzYl9yZWxlYXNlX2luZm9gLgogICAgICAgICkBcicAAAApAXIqAAAAcgYAAAByBgAAAHIHAAAAchUAAAAVAwAAcwIAAAAACHoiTGludXhEaXN0cmlidXRpb24ubHNiX3JlbGVhc2VfaW5mb2MBAAAAAAAAAAEAAAABAAAAQwAAAHMGAAAAfABqAFMAKQF67AogICAgICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBpbmZvcm1hdGlvbgogICAgICAgIGl0ZW1zIGZyb20gdGhlIGRpc3RybyByZWxlYXNlIGZpbGUgZGF0YSBzb3VyY2Ugb2YgdGhlIExpbnV4CiAgICAgICAgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywg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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 16
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
appdirs.cpython-36.opt-1.pyc
18.10 KB
lrw-r--r--
2024-04-06 13:40:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
appdirs.cpython-36.pyc
18.10 KB
lrw-r--r--
2024-04-06 13:40:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
distro.cpython-36.opt-1.pyc
31.75 KB
lrw-r--r--
2024-04-06 13:40:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
distro.cpython-36.pyc
31.75 KB
lrw-r--r--
2024-04-06 13:40:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ipaddress.cpython-36.opt-1.pyc
64.64 KB
lrw-r--r--
2024-04-06 13:40:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ipaddress.cpython-36.pyc
64.77 KB
lrw-r--r--
2024-04-06 13:40:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-36.opt-1.pyc
196.32 KB
lrw-r--r--
2024-04-06 13:40:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-36.pyc
196.32 KB
lrw-r--r--
2024-04-06 13:40:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
re-vendor.cpython-36.opt-1.pyc
1.01 KB
lrw-r--r--
2024-04-06 13:40:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
re-vendor.cpython-36.pyc
1.01 KB
lrw-r--r--
2024-04-06 13:40:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
retrying.cpython-36.opt-1.pyc
7.83 KB
lrw-r--r--
2024-04-06 13:40:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
retrying.cpython-36.pyc
7.83 KB
lrw-r--r--
2024-04-06 13:40:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-36.opt-1.pyc
23.84 KB
lrw-r--r--
2024-04-06 13:40:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-36.pyc
23.84 KB
lrw-r--r--
2024-04-06 13:40:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-36.opt-1.pyc
2.66 KB
lrw-r--r--
2024-04-06 13:40:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-36.pyc
2.66 KB
lrw-r--r--
2024-04-06 13:40:46
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).