REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 35.84 KB
Close
/opt/alt/python36/lib/python3.6/site-packages/pip/_vendor/__pycache__/distro.cpython-36.pyc
Text
Base64
Mw0NChaUUmVsqgAA4wAAAAAAAAAAAAAAAAYAAABAAAAAc4QBAABkAFoAZAFkAmwBWgFkAWQCbAJaAmQBZAJsA1oDZAFkAmwEWgRkAWQCbAVaBWQBZAJsBloGZAFkAmwHWgdkAWQCbAhaCGUBaglqCmQDZASDAloLZAVaDGQGZAdpAVoNZAdkB2QIZAhkCGQJnAVaDmQKZAhpAVoPZQJqEGQLgwFaEWUCahBkDIMBWhJkDWQOZA9lDGQQZBFmBloTZEFkE2QUhAFaFGQVZBaEAFoVZEJkGGQZhAFaFmRDZBpkG4QBWhdkRGQcZB2EAVoYZEVkHmQfhAFaGWRGZCBkIYQBWhpkR2QiZCOEAVobZCRkJYQAWhxkJmQnhABaHWRIZChkKYQBWh5kKmQrhABaH2QsZC2EAFogZC5kL4QAWiFkMGQxhABaImQyZDOEAFojZDRkNYQAWiRkNmQ3hABaJWQ4ZDmEAFomRwBkOmQ7hABkO2UngwNaKEcAZDxkPYQAZD1lJ4MDWillKYMAWipkPmQ/hABaK2UsZEBrApABcoBlK4MAAQBkAlMAKUlhDAMAAApUaGUgYGBkaXN0cm9gYCBwYWNrYWdlIChgYGRpc3Ryb2BgIHN0YW5kcyBmb3IgTGludXggRGlzdHJpYnV0aW9uKSBwcm92aWRlcwppbmZvcm1hdGlvbiBhYm91dCB0aGUgTGludXggZGlzdHJpYnV0aW9uIGl0IHJ1bnMgb24sIHN1Y2ggYXMgYSByZWxpYWJsZQptYWNoaW5lLXJlYWRhYmxlIGRpc3RybyBJRCwgb3IgdmVyc2lvbiBpbmZvcm1hdGlvbi4KCkl0IGlzIHRoZSByZWNvbW1lbmRlZCByZXBsYWNlbWVudCBmb3IgUHl0aG9uJ3Mgb3JpZ2luYWwKOnB5OmZ1bmM6YHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbmAgZnVuY3Rpb24sIGJ1dCBpdCBwcm92aWRlcyBtdWNoIG1vcmUKZnVuY3Rpb25hbGl0eS4gQW4gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24gYmVjYW1lIG5lY2Vzc2FyeSBiZWNhdXNlIFB5dGhvbgozLjUgZGVwcmVjYXRlZCB0aGlzIGZ1bmN0aW9uLCBhbmQgUHl0aG9uIDMuOCB3aWxsIHJlbW92ZSBpdCBhbHRvZ2V0aGVyLgpJdHMgcHJlZGVjZXNzb3IgZnVuY3Rpb24gOnB5OmZ1bmM6YHBsYXRmb3JtLmRpc3RgIHdhcyBhbHJlYWR5CmRlcHJlY2F0ZWQgc2luY2UgUHl0aG9uIDIuNiBhbmQgd2lsbCBhbHNvIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuOC4KU3RpbGwsIHRoZXJlIGFyZSBtYW55IGNhc2VzIGluIHdoaWNoIGFjY2VzcyB0byBPUyBkaXN0cmlidXRpb24gaW5mb3JtYXRpb24KaXMgbmVlZGVkLiBTZWUgYFB5dGhvbiBpc3N1ZSAxMzIyIDxodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzMjI+YF8gZm9yCm1vcmUgaW5mb3JtYXRpb24uCukAAAAATloLVU5JWENPTkZESVJ6BC9ldGN6Cm9zLXJlbGVhc2XaAm9s2gZvcmFjbGXaBHJoZWwpBdoWZW50ZXJwcmlzZWVudGVycHJpc2Vhc9oaZW50ZXJwcmlzZWVudGVycHJpc2VzZXJ2ZXLaG3JlZGhhdGVudGVycHJpc2V3b3Jrc3RhdGlvbtoWcmVkaGF0ZW50ZXJwcmlzZXNlcnZlctobcmVkaGF0ZW50ZXJwcmlzZWNvbXB1dGVub2Rl2gZyZWRoYXR6QSg/OlteKV0qXCkoLiopXCgpPyAqKD86U1RMICk/KFtcZC4rXC1hLXpdKlxkKSAqKD86ZXNhZWxlciAqKT8oLispehsoXHcrKVstX10ocmVsZWFzZXx2ZXJzaW9uKSTaDmRlYmlhbl92ZXJzaW9uegtsc2ItcmVsZWFzZXoLb2VtLXJlbGVhc2V6DnN5c3RlbS1yZWxlYXNleg1wbGVzay1yZWxlYXNlVGMBAAAAAAAAAAEAAAACAAAAQwAAAHMKAAAAdABqAXwAgwFTACkBYRsEAAAKICAgIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24gYXMgYSB0dXBsZQogICAgYGAoaWRfbmFtZSwgdmVyc2lvbiwgY29kZW5hbWUpYGAgd2l0aCBpdGVtcyBhcyBmb2xsb3dzOgoKICAgICogYGBpZF9uYW1lYGA6ICBJZiAqZnVsbF9kaXN0cmlidXRpb25fbmFtZSogaXMgZmFsc2UsIHRoZSByZXN1bHQgb2YKICAgICAgOmZ1bmM6YGRpc3Ryby5pZGAuIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLm5hbWVgLgoKICAgICogYGB2ZXJzaW9uYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8udmVyc2lvbmAuCgogICAgKiBgYGNvZGVuYW1lYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8uY29kZW5hbWVgLgoKICAgIFRoZSBpbnRlcmZhY2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9yaWdpbmFsCiAgICA6cHk6ZnVuYzpgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uYCBmdW5jdGlvbiwgc3VwcG9ydGluZyBhIHN1YnNldCBvZgogICAgaXRzIHBhcmFtZXRlcnMuCgogICAgVGhlIGRhdGEgaXQgcmV0dXJucyBtYXkgbm90IGV4YWN0bHkgYmUgdGhlIHNhbWUsIGJlY2F1c2UgaXQgdXNlcyBtb3JlIGRhdGEKICAgIHNvdXJjZXMgdGhhbiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24sIGFuZCB0aGF0IG1heSBsZWFkIHRvIGRpZmZlcmVudCBkYXRhIGlmCiAgICB0aGUgT1MgZGlzdHJpYnV0aW9uIGlzIG5vdCBjb25zaXN0ZW50IGFjcm9zcyBtdWx0aXBsZSBkYXRhIHNvdXJjZXMgaXQKICAgIHByb3ZpZGVzICh0aGVyZSBhcmUgaW5kZWVkIHN1Y2ggZGlzdHJpYnV0aW9ucyAuLi4pLgoKICAgIEFub3RoZXIgcmVhc29uIGZvciBkaWZmZXJlbmNlcyBpcyB0aGUgZmFjdCB0aGF0IHRoZSA6ZnVuYzpgZGlzdHJvLmlkYAogICAgbWV0aG9kIG5vcm1hbGl6ZXMgdGhlIGRpc3RybyBJRCBzdHJpbmcgdG8gYSByZWxpYWJsZSBtYWNoaW5lLXJlYWRhYmxlIHZhbHVlCiAgICBmb3IgYSBudW1iZXIgb2YgcG9wdWxhciBPUyBkaXN0cmlidXRpb25zLgogICAgKQLaB19kaXN0cm/aEmxpbnV4X2Rpc3RyaWJ1dGlvbikB2hZmdWxsX2Rpc3RyaWJ1dGlvbl9uYW1lqQByDwAAAPqBL2J1aWxkZGlyL2J1aWxkL0JVSUxEUk9PVC9hbHQtcHl0aG9uMzYtcGlwLTIwLjIuNC01LmVsOC54ODZfNjQvb3B0L2FsdC9weXRob24zNi9saWIvcHl0aG9uMy42L3NpdGUtcGFja2FnZXMvcGlwL192ZW5kb3IvZGlzdHJvLnB5cg0AAABkAAAAcwIAAAAAGXINAAAAYwAAAAAAAAAAAAAAAAEAAABDAAAAcwgAAAB0AGoBgwBTACkBYUQLAAAKICAgIFJldHVybiB0aGUgZGlzdHJvIElEIG9mIHRoZSBjdXJyZW50IGRpc3RyaWJ1dGlvbiwgYXMgYQogICAgbWFjaGluZS1yZWFkYWJsZSBzdHJpbmcuCgogICAgRm9yIGEgbnVtYmVyIG9mIE9TIGRpc3RyaWJ1dGlvbnMsIHRoZSByZXR1cm5lZCBkaXN0cm8gSUQgdmFsdWUgaXMKICAgICpyZWxpYWJsZSosIGluIHRoZSBzZW5zZSB0aGF0IGl0IGlzIGRvY3VtZW50ZWQgYW5kIHRoYXQgaXQgZG9lcyBub3QgY2hhbmdlCiAgICBhY3Jvc3MgcmVsZWFzZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KCiAgICBUaGlzIHBhY2thZ2UgbWFpbnRhaW5zIHRoZSBmb2xsb3dpbmcgcmVsaWFibGUgZGlzdHJvIElEIHZhbHVlczoKCiAgICA9PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIERpc3RybyBJRCAgICAgICBEaXN0cmlidXRpb24KICAgID09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgInVidW50dSIgICAgICAgIFVidW50dQogICAgImRlYmlhbiIgICAgICAgIERlYmlhbgogICAgInJoZWwiICAgICAgICAgIFJlZEhhdCBFbnRlcnByaXNlIExpbnV4CiAgICAiY2VudG9zIiAgICAgICAgQ2VudE9TCiAgICAiZmVkb3JhIiAgICAgICAgRmVkb3JhCiAgICAic2xlcyIgICAgICAgICAgU1VTRSBMaW51eCBFbnRlcnByaXNlIFNlcnZlcgogICAgIm9wZW5zdXNlIiAgICAgIG9wZW5TVVNFCiAgICAiYW1hem9uIiAgICAgICAgQW1hem9uIExpbnV4CiAgICAiYXJjaCIgICAgICAgICAgQXJjaCBMaW51eAogICAgImNsb3VkbGludXgiICAgIENsb3VkTGludXggT1MKICAgICJleGhlcmJvIiAgICAgICBFeGhlcmJvIExpbnV4CiAgICAiZ2VudG9vIiAgICAgICAgR2VuVG9vIExpbnV4CiAgICAiaWJtX3Bvd2Vya3ZtIiAgSUJNIFBvd2VyS1ZNCiAgICAia3ZtaWJtIiAgICAgICAgS1ZNIGZvciBJQk0geiBTeXN0ZW1zCiAgICAibGludXhtaW50IiAgICAgTGludXggTWludAogICAgIm1hZ2VpYSIgICAgICAgIE1hZ2VpYQogICAgIm1hbmRyaXZhIiAgICAgIE1hbmRyaXZhIExpbnV4CiAgICAicGFyYWxsZWxzIiAgICAgUGFyYWxsZWxzCiAgICAicGlkb3JhIiAgICAgICAgUGlkb3JhCiAgICAicmFzcGJpYW4iICAgICAgUmFzcGJpYW4KICAgICJvcmFjbGUiICAgICAgICBPcmFjbGUgTGludXggKGFuZCBPcmFjbGUgRW50ZXJwcmlzZSBMaW51eCkKICAgICJzY2llbnRpZmljIiAgICBTY2llbnRpZmljIExpbnV4CiAgICAic2xhY2t3YXJlIiAgICAgU2xhY2t3YXJlCiAgICAieGVuc2VydmVyIiAgICAgWGVuU2VydmVyCiAgICAib3BlbmJzZCIgICAgICAgT3BlbkJTRAogICAgIm5ldGJzZCIgICAgICAgIE5ldEJTRAogICAgImZyZWVic2QiICAgICAgIEZyZWVCU0QKICAgICJtaWRuaWdodGJzZCIgICBNaWRuaWdodEJTRAogICAgPT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgSWYgeW91IGhhdmUgYSBuZWVkIHRvIGdldCBkaXN0cm9zIGZvciByZWxpYWJsZSBJRHMgYWRkZWQgaW50byB0aGlzIHNldCwKICAgIG9yIGlmIHlvdSBmaW5kIHRoYXQgdGhlIDpmdW5jOmBkaXN0cm8uaWRgIGZ1bmN0aW9uIHJldHVybnMgYSBkaWZmZXJlbnQKICAgIGRpc3RybyBJRCBmb3Igb25lIG9mIHRoZSBsaXN0ZWQgZGlzdHJvcywgcGxlYXNlIGNyZWF0ZSBhbiBpc3N1ZSBpbiB0aGUKICAgIGBkaXN0cm8gaXNzdWUgdHJhY2tlcmBfLgoKICAgICoqTG9va3VwIGhpZXJhcmNoeSBhbmQgdHJhbnNmb3JtYXRpb25zOioqCgogICAgRmlyc3QsIHRoZSBJRCBpcyBvYnRhaW5lZCBmcm9tIHRoZSBmb2xsb3dpbmcgc291cmNlcywgaW4gdGhlIHNwZWNpZmllZAogICAgb3JkZXIuIFRoZSBmaXJzdCBhdmFpbGFibGUgYW5kIG5vbi1lbXB0eSB2YWx1ZSBpcyB1c2VkOgoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiSUQiIGF0dHJpYnV0ZSBvZiB0aGUgb3MtcmVsZWFzZSBmaWxlLAoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiRGlzdHJpYnV0b3IgSUQiIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgY29tbWFuZCwKCiAgICAqIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUsCgogICAgVGhlIHNvIGRldGVybWluZWQgSUQgdmFsdWUgdGhlbiBwYXNzZXMgdGhlIGZvbGxvd2luZyB0cmFuc2Zvcm1hdGlvbnMsCiAgICBiZWZvcmUgaXQgaXMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2Q6CgogICAgKiBpdCBpcyB0cmFuc2xhdGVkIHRvIGxvd2VyIGNhc2UsCgogICAgKiBibGFua3MgKHdoaWNoIHNob3VsZCBub3QgYmUgdGhlcmUgYW55d2F5KSBhcmUgdHJhbnNsYXRlZCB0byB1bmRlcnNjb3JlcywKCiAgICAqIGEgbm9ybWFsaXphdGlvbiBvZiB0aGUgSUQgaXMgcGVyZm9ybWVkLCBiYXNlZCB1cG9uCiAgICAgIGBub3JtYWxpemF0aW9uIHRhYmxlc2BfLiBUaGUgcHVycG9zZSBvZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgdG8gZW5zdXJlCiAgICAgIHRoYXQgdGhlIElEIGlzIGFzIHJlbGlhYmxlIGFzIHBvc3NpYmxlLCBldmVuIGFjcm9zcyBpbmNvbXBhdGlibGUgY2hhbmdlcwogICAgICBpbiB0aGUgT1MgZGlzdHJpYnV0aW9ucy4gQSBjb21tb24gcmVhc29uIGZvciBhbiBpbmNvbXBhdGlibGUgY2hhbmdlIGlzCiAgICAgIHRoZSBhZGRpdGlvbiBvZiBhbiBvcy1yZWxlYXNlIGZpbGUsIG9yIHRoZSBhZGRpdGlvbiBvZiB0aGUgbHNiX3JlbGVhc2UKICAgICAgY29tbWFuZCwgd2l0aCBJRCB2YWx1ZXMgdGhhdCBkaWZmZXIgZnJvbSB3aGF0IHdhcyBwcmV2aW91c2x5IGRldGVybWluZWQKICAgICAgZnJvbSB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZSBuYW1lLgogICAgKQJyDAAAANoCaWRyDwAAAHIPAAAAcg8AAAByEAAAAHIRAAAAgAAAAHMCAAAAAExyEQAAAEZjAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAHQAagF8AIMBUwApAWFrBAAACiAgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLCBhcyBhIGh1bWFuLXJlYWRhYmxlCiAgICBzdHJpbmcuCgogICAgSWYgKnByZXR0eSogaXMgZmFsc2UsIHRoZSBuYW1lIGlzIHJldHVybmVkIHdpdGhvdXQgdmVyc2lvbiBvciBjb2RlbmFtZS4KICAgIChlLmcuICJDZW50T1MgTGludXgiKQoKICAgIElmICpwcmV0dHkqIGlzIHRydWUsIHRoZSB2ZXJzaW9uIGFuZCBjb2RlbmFtZSBhcmUgYXBwZW5kZWQuCiAgICAoZS5nLiAiQ2VudE9TIExpbnV4IDcuMS4xNTAzIChDb3JlKSIpCgogICAgKipMb29rdXAgaGllcmFyY2h5OioqCgogICAgVGhlIG5hbWUgaXMgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5nIHNvdXJjZXMsIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIuCiAgICBUaGUgZmlyc3QgYXZhaWxhYmxlIGFuZCBub24tZW1wdHkgdmFsdWUgaXMgdXNlZDoKCiAgICAqIElmICpwcmV0dHkqIGlzIGZhbHNlOgoKICAgICAgLSB0aGUgdmFsdWUgb2YgdGhlICJOQU1FIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiRGlzdHJpYnV0b3IgSUQiIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgICBjb21tYW5kLAoKICAgICAgLSB0aGUgdmFsdWUgb2YgdGhlICI8bmFtZT4iIGZpZWxkIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLgoKICAgICogSWYgKnByZXR0eSogaXMgdHJ1ZToKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiUFJFVFRZX05BTUUiIGF0dHJpYnV0ZSBvZiB0aGUgb3MtcmVsZWFzZSBmaWxlLAoKICAgICAgLSB0aGUgdmFsdWUgb2YgdGhlICJEZXNjcmlwdGlvbiIgYXR0cmlidXRlIHJldHVybmVkIGJ5IHRoZSBsc2JfcmVsZWFzZQogICAgICAgIGNvbW1hbmQsCgogICAgICAtIHRoZSB2YWx1ZSBvZiB0aGUgIjxuYW1lPiIgZmllbGQgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUsIGFwcGVuZGVkCiAgICAgICAgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHByZXR0eSB2ZXJzaW9uICgiPHZlcnNpb25faWQ+IiBhbmQgIjxjb2RlbmFtZT4iCiAgICAgICAgZmllbGRzKSBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZSwgaWYgYXZhaWxhYmxlLgogICAgKQJyDAAAANoEbmFtZSkB2gZwcmV0dHlyDwAAAHIPAAAAchAAAAByEgAAAM8AAABzAgAAAAAkchIAAABjAgAAAAAAAAACAAAAAwAAAEMAAABzDAAAAHQAagF8AHwBgwJTACkBYXYGAAAKICAgIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24sIGFzIGEgaHVtYW4tcmVhZGFibGUKICAgIHN0cmluZy4KCiAgICBJZiAqcHJldHR5KiBpcyBmYWxzZSwgdGhlIHZlcnNpb24gaXMgcmV0dXJuZWQgd2l0aG91dCBjb2RlbmFtZSAoZS5nLgogICAgIjcuMCIpLgoKICAgIElmICpwcmV0dHkqIGlzIHRydWUsIHRoZSBjb2RlbmFtZSBpbiBwYXJlbnRoZXNpcyBpcyBhcHBlbmRlZCwgaWYgdGhlCiAgICBjb2RlbmFtZSBpcyBub24tZW1wdHkgKGUuZy4gIjcuMCAoTWFpcG8pIikuCgogICAgU29tZSBkaXN0cmlidXRpb25zIHByb3ZpZGUgdmVyc2lvbiBudW1iZXJzIHdpdGggZGlmZmVyZW50IHByZWNpc2lvbnMgaW4KICAgIHRoZSBkaWZmZXJlbnQgc291cmNlcyBvZiBkaXN0cmlidXRpb24gaW5mb3JtYXRpb24uIEV4YW1pbmluZyB0aGUgZGlmZmVyZW50CiAgICBzb3VyY2VzIGluIGEgZml4ZWQgcHJpb3JpdHkgb3JkZXIgZG9lcyBub3QgYWx3YXlzIHlpZWxkIHRoZSBtb3N0IHByZWNpc2UKICAgIHZlcnNpb24gKGUuZy4gZm9yIERlYmlhbiA4LjIsIG9yIENlbnRPUyA3LjEpLgoKICAgIFRoZSAqYmVzdCogcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGFwcHJvYWNoIGZvciB0aGUgcmV0dXJuZWQKICAgIHZlcnNpb246CgogICAgSWYgKmJlc3QqIGlzIGZhbHNlLCB0aGUgZmlyc3Qgbm9uLWVtcHR5IHZlcnNpb24gbnVtYmVyIGluIHByaW9yaXR5IG9yZGVyIG9mCiAgICB0aGUgZXhhbWluZWQgc291cmNlcyBpcyByZXR1cm5lZC4KCiAgICBJZiAqYmVzdCogaXMgdHJ1ZSwgdGhlIG1vc3QgcHJlY2lzZSB2ZXJzaW9uIG51bWJlciBvdXQgb2YgYWxsIGV4YW1pbmVkCiAgICBzb3VyY2VzIGlzIHJldHVybmVkLgoKICAgICoqTG9va3VwIGhpZXJhcmNoeToqKgoKICAgIEluIGFsbCBjYXNlcywgdGhlIHZlcnNpb24gbnVtYmVyIGlzIG9idGFpbmVkIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2VzLgogICAgSWYgKmJlc3QqIGlzIGZhbHNlLCB0aGlzIG9yZGVyIHJlcHJlc2VudHMgdGhlIHByaW9yaXR5IG9yZGVyOgoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiVkVSU0lPTl9JRCIgYXR0cmlidXRlIG9mIHRoZSBvcy1yZWxlYXNlIGZpbGUsCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIlJlbGVhc2UiIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgY29tbWFuZCwKICAgICogdGhlIHZlcnNpb24gbnVtYmVyIHBhcnNlZCBmcm9tIHRoZSAiPHZlcnNpb25faWQ+IiBmaWVsZCBvZiB0aGUgZmlyc3QgbGluZQogICAgICBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZSwKICAgICogdGhlIHZlcnNpb24gbnVtYmVyIHBhcnNlZCBmcm9tIHRoZSAiUFJFVFRZX05BTUUiIGF0dHJpYnV0ZSBvZiB0aGUKICAgICAgb3MtcmVsZWFzZSBmaWxlLCBpZiBpdCBmb2xsb3dzIHRoZSBmb3JtYXQgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGVzLgogICAgKiB0aGUgdmVyc2lvbiBudW1iZXIgcGFyc2VkIGZyb20gdGhlICJEZXNjcmlwdGlvbiIgYXR0cmlidXRlIHJldHVybmVkIGJ5CiAgICAgIHRoZSBsc2JfcmVsZWFzZSBjb21tYW5kLCBpZiBpdCBmb2xsb3dzIHRoZSBmb3JtYXQgb2YgdGhlIGRpc3RybyByZWxlYXNlCiAgICAgIGZpbGVzLgogICAgKQJyDAAAANoHdmVyc2lvbikCchMAAADaBGJlc3RyDwAAAHIPAAAAchAAAAByFAAAAPYAAABzAgAAAAApchQAAABjAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAHQAagF8AIMBUwApAWGgAQAACiAgICBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uIGFzIGEgdHVwbGUKICAgIGBgKG1ham9yLCBtaW5vciwgYnVp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YnV0aW9uIGluIHJlZ2FyZHMgdG8gcGFja2FnaW5nCiAgICBhbmQgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcywgZm9yIGV4YW1wbGUgZGlzdHJpYnV0aW9ucyB0aGUgY3VycmVudAogICAgZGlzdHJpYnV0aW9uIGlzIGEgZGVyaXZhdGl2ZSBmcm9tLgoKICAgICoqTG9va3VwIGhpZXJhcmNoeToqKgoKICAgIFRoaXMgaW5mb3JtYXRpb24gaXRlbSBpcyBvbmx5IHByb3ZpZGVkIGJ5IHRoZSBvcy1yZWxlYXNlIGZpbGUuCiAgICBGb3IgZGV0YWlscywgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgIklEX0xJS0UiIGF0dHJpYnV0ZSBpbiB0aGUKICAgIGBvcy1yZWxlYXNlIG1hbiBwYWdlCiAgICA8aHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvc3lzdGVtZC9tYW4vb3MtcmVsZWFzZS5odG1sPmBfLgogICAgKQJyDAAAANoEbGlrZXIPAAAAcg8AAAByDwAAAHIQAAAAchoAAABaAQAAcwIAAAAADnIaAAAAYwAAAAAAAAAAAAAAAAEAAABDAAAAcwgAAAB0AGoBgwBTACkBYaYCAAAKICAgIFJldHVybiB0aGUgY29kZW5hbWUgZm9yIHRoZSByZWxlYXNlIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiwKICAgIGFzIGEgc3RyaW5nLgoKICAgIElmIHRoZSBkaXN0cmlidXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvZGVuYW1lLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCgogICAgTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBjb2RlbmFtZSBpcyBub3QgYWx3YXlzIHJlYWxseSBhIGNvZGVuYW1lLiBGb3IKICAgIGV4YW1wbGUsIG9wZW5TVVNFIHJldHVybnMgIng4Nl82NCIuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIHN1Y2gKICAgIGNhc2VzIGluIGFueSBzcGVjaWFsIHdheSBhbmQganVzdCByZXR1cm5zIHRoZSBzdHJpbmcgaXQgZmluZHMsIGlmIGFueS4KCiAgICAqKkxvb2t1cCBoaWVyYXJjaHk6KioKCiAgICAqIHRoZSBjb2RlbmFtZSB3aXRoaW4gdGhlICJWRVJTSU9OIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwgaWYKICAgICAgcHJvdmlkZWQsCgogICAgKiB0aGUgdmFsdWUgb2YgdGhlICJDb2RlbmFtZSIgYXR0cmlidXRlIHJldHVybmVkIGJ5IHRoZSBsc2JfcmVsZWFzZQogICAgICBjb21tYW5kLAoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiPGNvZGVuYW1lPiIgZmllbGQgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUuCiAgICApAnIMAAAA2ghjb2RlbmFtZXIPAAAAcg8AAAByDwAAAHIQAAAAchsAAABrAQAAcwIAAAAAFXIbAAAAYwIAAAAAAAAAAgAAAAMAAABDAAAAcwwAAAB0AGoBfAB8AYMCUwApAWHUBAAACiAgICBSZXR1cm4gY2VydGFpbiBtYWNoaW5lLXJlYWRhYmxlIGluZm9ybWF0aW9uIGl0ZW1zIGFib3V0IHRoZSBjdXJyZW50IE9TCiAgICBkaXN0cmlidXRpb24gaW4gYSBkaWN0aW9uYXJ5LCBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CgogICAgLi4gc291cmNlY29kZTo6IHB5dGhvbgoKICAgICAgICB7CiAgICAgICAgICAgICdpZCc6ICdyaGVsJywKICAgICAgICAgICAgJ3ZlcnNpb24nOiAnNy4wJywKICAgICAgICAgICAgJ3ZlcnNpb25fcGFydHMnOiB7CiAgICAgICAgICAgICAgICAnbWFqb3InOiAnNycsCiAgICAgICAgICAgICAgICAnbWlub3InOiAnMCcsCiAgICAgICAgICAgICAgICAnYnVpbGRfbnVtYmVyJzogJycKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ2xpa2UnOiAnZmVkb3JhJywKICAgICAgICAgICAgJ2NvZGVuYW1lJzogJ01haXBvJwogICAgICAgIH0KCiAgICBUaGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUgYW5kIGtleXMgYXJlIGFsd2F5cyB0aGUgc2FtZSwgcmVnYXJkbGVzcyBvZiB3aGljaAogICAgaW5mb3JtYXRpb24gaXRlbXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBkYXRhIHNvdXJjZXMuIFRoZSB2YWx1ZXMKICAgIGZvciB0aGUgdmFyaW91cyBrZXlzIGFyZSBhcyBmb2xsb3dzOgoKICAgICogYGBpZGBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmlkYC4KCiAgICAqIGBgdmVyc2lvbmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gLgoKICAgICogYGB2ZXJzaW9uX3BhcnRzIC0+IG1ham9yYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubWFqb3JfdmVyc2lvbmAuCgogICAgKiBgYHZlcnNpb25fcGFydHMgLT4gbWlub3JgYDogIFRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5taW5vcl92ZXJzaW9uYC4KCiAgICAqIGBgdmVyc2lvbl9wYXJ0cyAtPiBidWlsZF9udW1iZXJgYDogIFRoZSByZXN1bHQgb2YKICAgICAgOmZ1bmM6YGRpc3Ryby5idWlsZF9udW1iZXJgLgoKICAgICogYGBsaWtlYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubGlrZWAuCgogICAgKiBgYGNvZGVuYW1lYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8uY29kZW5hbWVgLgoKICAgIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSAqcHJldHR5KiBhbmQgKmJlc3QqIHBhcmFtZXRlcnMsIHNlZSB0aGUKICAgIDpmdW5jOmBkaXN0cm8udmVyc2lvbmAgbWV0aG9kLgogICAgKQJyDAAAANoEaW5mbykCchMAAAByFQAAAHIPAAAAcg8AAAByEAAAAHIcAAAAgwEAAHMCAAAAAClyHAAAAGMAAAAAAAAAAAAAAAABAAAAQwAAAHMIAAAAdABqAYMAUwApAXriCiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24gaXRlbXMKICAgIGZyb20gdGhlIG9zLXJlbGVhc2UgZmlsZSBkYXRhIHNvdXJjZSBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24uCgogICAgU2VlIGBvcy1yZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbiBpdGVtcy4KICAgICkCcgwAAADaD29zX3JlbGVhc2VfaW5mb3IPAAAAcg8AAAByDwAAAHIQAAAAch0AAACvAQAAcwIAAAAAB3IdAAAAYwAAAAAAAAAAAAAAAAEAAABDAAAAcwgAAAB0AGoBgwBTACkBevUKICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBpbmZvcm1hdGlvbiBpdGVtcwogICAgZnJvbSB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCBkYXRhIHNvdXJjZSBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24uCgogICAgU2VlIGBsc2JfcmVsZWFzZSBjb21tYW5kIG91dHB1dGBfIGZvciBkZXRhaWxzIGFib3V0IHRoZXNlIGluZm9ybWF0aW9uCiAgICBpdGVtcy4KICAgICkCcgwAAADaEGxzYl9yZWxlYXNlX2luZm9yDwAAAHIPAAAAcg8AAAByEAAAAHIeAAAAuQEAAHMCAAAAAAhyHgAAAGMAAAAAAAAAAAAAAAABAAAAQwAAAHMIAAAAdABqAYMAUwApAXrqCiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24gaXRlbXMKICAgIGZyb20gdGhlIGRpc3RybyByZWxlYXNlIGZpbGUgZGF0YSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLgoKICAgIFNlZSBgZGlzdHJvIHJlbGVhc2UgZmlsZWBfIGZvciBkZXRhaWxzIGFib3V0IHRoZXNlIGluZm9ybWF0aW9uIGl0ZW1zLgogICAgKQJyDAAAANoTZGlzdHJvX3JlbGVhc2VfaW5mb3IPAAAAcg8AAAByDwAAAHIQAAAAch8AAADEAQAAcwIAAAAAB3IfAAAAYwAAAAAAAAAAAAAAAAEAAABDAAAAcwgAAAB0AGoBgwBTACkBep8KICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBpbmZvcm1hdGlvbiBpdGVtcwogICAgZnJvbSB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZSBkYXRhIHNvdXJjZSBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24uCiAgICApAnIMAAAA2gp1bmFtZV9pbmZvcg8AAAByDwAAAHIPAAAAchAAAAByIAAAAM4BAABzAgAAAAAFciAAAABjAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAHQAagF8AIMBUwApAWGTAQAACiAgICBSZXR1cm4gYSBzaW5nbGUgbmFtZWQgaW5mb3JtYXRpb24gaXRlbSBmcm9tIHRoZSBvcy1yZWxlYXNlIGZpbGUgZGF0YSBzb3VyY2UKICAgIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbi4KCiAgICBQYXJhbWV0ZXJzOgoKICAgICogYGBhdHRyaWJ1dGVgYCAoc3RyaW5nKTogS2V5IG9mIHRoZSBpbmZvcm1hdGlvbiBpdGVtLgoKICAgIFJldHVybnM6CgogICAgKiAoc3RyaW5nKTogVmFsdWUgb2YgdGhlIGluZm9ybWF0aW9uIGl0ZW0sIGlmIHRoZSBpdGVtIGV4aXN0cy4KICAgICAgVGhlIGVtcHR5IHN0cmluZywgaWYgdGhlIGl0ZW0gZG9lcyBub3QgZXhpc3QuCgogICAgU2VlIGBvcy1yZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbiBpdGVtcy4KICAgICkCcgwAAADaD29zX3JlbGVhc2VfYXR0cikB2glhdHRyaWJ1dGVyDwAAAHIPAAAAchAAAAByIQAAANYBAABzAgAAAAAQciEAAABjAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAHQAagF8AIMBUwApAWGtAQAACiAgICBSZXR1cm4gYSBzaW5nbGUgbmFtZWQgaW5mb3JtYXRpb24gaXRlbSBmcm9tIHRoZSBsc2JfcmVsZWFzZSBjb21tYW5kIG91dHB1dAogICAgZGF0YSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLgoKICAgIFBhcmFtZXRlcnM6CgogICAgKiBgYGF0dHJpYnV0ZWBgIChzdHJpbmcpOiBLZXkgb2YgdGhlIGluZm9ybWF0aW9uIGl0ZW0uCgogICAgUmV0dXJuczoKCiAgICAqIChzdHJpbmcpOiBWYWx1ZSBvZiB0aGUgaW5mb3JtYXRpb24gaXRlbSwgaWYgdGhlIGl0ZW0gZXhpc3RzLgogICAgICBUaGUgZW1wdHkgc3RyaW5nLCBpZiB0aGUgaXRlbSBkb2VzIG5vdCBleGlzdC4KCiAgICBTZWUgYGxzYl9yZWxlYXNlIGNvbW1hbmQgb3V0cHV0YF8gZm9yIGRldGFpbHMgYWJvdXQgdGhlc2UgaW5mb3JtYXRpb24KICAgIGl0ZW1zLgogICAgKQJyDAAAANoQbHNiX3JlbGVhc2VfYXR0cikBciIAAAByDwAAAHIPAAAAchAAAAByIwAAAOkBAABzAgAAAAARciMAAABjAQAAAAAAAAABAAAAAgAAAEMAAABzCgAAAHQAagF8AIMBUwApAWGbAQAACiAgICBSZXR1cm4gYSBzaW5nbGUgbmFtZWQgaW5mb3JtYXRpb24gaXRlbSBmcm9tIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlCiAgICBkYXRhIHNvdXJjZSBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24uCgogICAgUGFyYW1ldGVyczoKCiAgICAqIGBgYXR0cmlidXRlYGAgKHN0cmluZyk6IEtleSBvZiB0aGUgaW5mb3JtYXRpb24gaXRlbS4KCiAgICBSZXR1cm5zOgoKICAgICogKHN0cmluZyk6IFZhbHVlIG9mIHRoZSBpbmZvcm1hdGlvbiBpdGVtLCBpZiB0aGUgaXRlbSBleGlzdHMuCiAgICAgIFRoZSBlbXB0eSBzdHJpbmcsIGlmIHRoZSBpdGVtIGRvZXMgbm90IGV4aXN0LgoKICAgIFNlZSBgZGlzdHJvIHJlbGVhc2UgZmlsZWBfIGZvciBkZXRhaWxzIGFib3V0IHRoZXNlIGluZm9ybWF0aW9uIGl0ZW1zLgogICAgKQJyDAAAANoTZGlzdHJvX3JlbGVhc2VfYXR0cikB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YGNvbnNvbGlkYXRlZCBhY2Nlc3NvciBmdW5jdGlvbnNgXyBhbmQgYHNpbmdsZSBzb3VyY2UgYWNjZXNzb3IgZnVuY3Rpb25zYF8uCiAgICBCeSB1c2luZyBkZWZhdWx0IGluaXRpYWxpemF0aW9uIGFyZ3VtZW50cywgdGhhdCBtb2R1bGUtZ2xvYmFsIGluc3RhbmNlCiAgICByZXR1cm5zIGRhdGEgYWJvdXQgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uIChpLmUuIHRoZSBkaXN0cm8gdGhpcwogICAgcGFja2FnZSBydW5zIG9uKS4KCiAgICBOb3JtYWxseSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjcmVhdGUgYWRkaXRpb25hbCBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcy4KICAgIEhvd2V2ZXIsIGluIHNpdHVhdGlvbnMgd2hlcmUgY29udHJvbCBpcyBuZWVkZWQgb3ZlciB0aGUgZXhhY3QgZGF0YSBzb3VyY2VzCiAgICB0aGF0IGFyZSB1c2VkLCBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjYW4gYmUgY3JlYXRlZCB3aXRoIGEgc3BlY2lmaWMKICAgIGRpc3RybyByZWxlYXNlIGZpbGUsIG9yIGEgc3BlY2lmaWMgb3MtcmVsZWFzZSBmaWxlLCBvciB3aXRob3V0IGludm9raW5nIHRoZQogICAgbHNiX3JlbGVhc2UgY29tbWFuZC4KICAgIFTaAGMFAAAAAAAAAAUAAAADAAAAQwAAAHMuAAAAfAJwEHQAagFqAnQDdASDAnwAXwV8A3AaZAF8AF8GfAF8AF8HfAR8AF8IZAJTACkDYXALAAAKICAgICAgICBUaGUgaW5pdGlhbGl6YXRpb24gbWV0aG9kIG9mIHRoaXMgY2xhc3MgZ2F0aGVycyBpbmZvcm1hdGlvbiBmcm9tIHRoZQogICAgICAgIGF2YWlsYWJsZSBkYXRhIHNvdXJjZXMsIGFuZCBzdG9yZXMgdGhhdCBpbiBwcml2YXRlIGluc3RhbmNlIGF0dHJpYnV0ZXMuCiAgICAgICAgU3Vic2VxdWVudCBhY2Nlc3MgdG8gdGhlIGluZm9ybWF0aW9uIGl0ZW1zIHVzZXMgdGhlc2UgcHJpdmF0ZSBpbnN0YW5jZQogICAgICAgIGF0dHJpYnV0ZXMsIHNvIHRoYXQgdGhlIGRhdGEgc291cmNlcyBhcmUgcmVhZCBvbmx5IG9uY2UuCgogICAgICAgIFBhcmFtZXRlcnM6CgogICAgICAgICogYGBpbmNsdWRlX2xzYmBgIChib29sKTogQ29udHJvbHMgd2hldGhlciB0aGUKICAgICAgICAgIGBsc2JfcmVsZWFzZSBjb21tYW5kIG91dHB1dGBfIGlzIGluY2x1ZGVkIGFzIGEgZGF0YSBzb3VyY2UuCgogICAgICAgICAgSWYgdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgcHJvZ3JhbSBleGVjdXRpb24KICAgICAgICAgIHBhdGgsIHRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQgd2lsbCBiZSBlbXB0eS4KCiAgICAgICAgKiBgYG9zX3JlbGVhc2VfZmlsZWBgIChzdHJpbmcpOiBUaGUgcGF0aCBuYW1lIG9mIHRoZQogICAgICAgICAgYG9zLXJlbGVhc2UgZmlsZWBfIHRoYXQgaXMgdG8gYmUgdXNlZCBhcyBhIGRhdGEgc291cmNlLgoKICAgICAgICAgIEFuIGVtcHR5IHN0cmluZyAodGhlIGRlZmF1bHQpIHdpbGwgY2F1c2UgdGhlIGRlZmF1bHQgcGF0aCBuYW1lIHRvCiAgICAgICAgICBiZSB1c2VkIChzZWUgYG9zLXJlbGVhc2UgZmlsZWBfIGZvciBkZXRhaWxzKS4KCiAgICAgICAgICBJZiB0aGUgc3BlY2lmaWVkIG9yIGRlZmF1bHRlZCBvcy1yZWxlYXNlIGZpbGUgZG9lcyBub3QgZXhpc3QsIHRoZQogICAgICAgICAgZGF0YSBzb3VyY2UgZm9yIHRoZSBvcy1yZWxlYXNlIGZpbGUgd2lsbCBiZSBlbXB0eS4KCiAgICAgICAgKiBgYGRpc3Ryb19yZWxlYXNlX2ZpbGVgYCAoc3RyaW5nKTogVGhlIHBhdGggbmFtZSBvZiB0aGUKICAgICAgICAgIGBkaXN0cm8gcmVsZWFzZSBmaWxlYF8gdGhhdCBpcyB0byBiZSB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuCgogICAgICAgICAgQW4gZW1wdHkgc3RyaW5nICh0aGUgZGVmYXVsdCkgd2lsbCBjYXVzZSBhIGRlZmF1bHQgc2VhcmNoIGFsZ29yaXRobQogICAgICAgICAgdG8gYmUgdXNlZCAoc2VlIGBkaXN0cm8gcmVsZWFzZSBmaWxlYF8gZm9yIGRldGFpbHMpLgoKICAgICAgICAgIElmIHRoZSBzcGVjaWZpZWQgZGlzdHJvIHJlbGVhc2UgZmlsZSBkb2VzIG5vdCBleGlzdCwgb3IgaWYgbm8gZGVmYXVsdAogICAgICAgICAgZGlzdHJvIHJlbGVhc2UgZmlsZSBjYW4gYmUgZm91bmQsIHRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIGRpc3RybwogICAgICAgICAgcmVsZWFzZSBmaWxlIHdpbGwgYmUgZW1wdHkuCgogICAgICAgICogYGBpbmNsdWRlX3VuYW1lYGAgKGJvb2wpOiBDb250cm9scyB3aGV0aGVyIHVuYW1lIGNvbW1hbmQgb3V0cHV0IGlzCiAgICAgICAgICBpbmNsdWRlZCBhcyBhIGRhdGEgc291cmNlLiBJZiB0aGUgdW5hbWUgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluCiAgICAgICAgICB0aGUgcHJvZ3JhbSBleGVjdXRpb24gcGF0aCB0aGUgZGF0YSBzb3VyY2UgZm9yIHRoZSB1bmFtZSBjb21tYW5kIHdpbGwKICAgICAgICAgIGJlIGVtcHR5LgoKICAgICAgICBQdWJsaWMgaW5zdGFuY2UgYXR0cmlidXRlczoKCiAgICAgICAgKiBgYG9zX3JlbGVhc2VfZmlsZWBgIChzdHJpbmcpOiBUaGUgcGF0aCBuYW1lIG9mIHRoZQogICAgICAgICAgYG9zLXJlbGVhc2UgZmlsZWBfIHRoYXQgaXMgYWN0dWFsbHkgdXNlZCBhcyBhIGRhdGEgc291cmNlLiBUaGUKICAgICAgICAgIGVtcHR5IHN0cmluZyBpZiBubyBkaXN0cm8gcmVsZWFzZSBmaWxlIGlzIHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgKiBgYGRpc3Ryb19yZWxlYXNlX2ZpbGVgYCAoc3RyaW5nKTogVGhlIHBhdGggbmFtZSBvZiB0aGUKICAgICAgICAgIGBkaXN0cm8gcmVsZWFzZSBmaWxlYF8gdGhhdCBpcyBhY3R1YWxseSB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuIFRoZQogICAgICAgICAgZW1wdHkgc3RyaW5nIGlmIG5vIGRpc3RybyByZWxlYXNlIGZpbGUgaXMgdXNlZCBhcyBhIGRhdGEgc291cmNlLgoKICAgICAgICAqIGBgaW5jbHVkZV9sc2JgYCAoYm9vbCk6IFRoZSByZXN1bHQgb2YgdGhlIGBgaW5jbHVkZV9sc2JgYCBwYXJhbWV0ZXIuCiAgICAgICAgICBUaGlzIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGxzYiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvYWRlZC4KCiAgICAgICAgKiBgYGluY2x1ZGVfdW5hbWVgYCAoYm9vbCk6IFRoZSByZXN1bHQgb2YgdGhlIGBgaW5jbHVkZV91bmFtZWBgCiAgICAgICAgICBwYXJhbWV0ZXIuIFRoaXMgY29udHJvbHMgd2hldGhlciB0aGUgdW5hbWUgaW5mb3JtYXRpb24gd2lsbAogICAgICAgICAgYmUgbG9hZGVkLgoKICAgICAgICBSYWlzZXM6CgogICAgICAgICogOnB5OmV4YzpgSU9FcnJvcmA6IFNvbWUgSS9PIGlzc3VlIHdpdGggYW4gb3MtcmVsZWFzZSBmaWxlIG9yIGRpc3RybwogICAgICAgICAgcmVsZWFzZSBmaWxlLgoKICAgICAgICAqIDpweTpleGM6YHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yYDogVGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQgaGFkCiAgICAgICAgICBzb21lIGlzc3VlIChvdGhlciB0aGFuIG5vdCBiZWluZyBhdmFpbGFibGUgaW4gdGhlIHByb2dyYW0gZXhlY3V0aW9uCiAgICAgICAgICBwYXRoKS4KCiAgICAgICAgKiA6cHk6ZXhjOmBVbmljb2RlRXJyb3JgOiBBIGRhdGEgc291cmNlIGhhcyB1bmV4cGVjdGVkIGNoYXJhY3RlcnMgb3IKICAgICAgICAgIHVzZXMgYW4gdW5leHBlY3RlZCBlbmNvZGluZy4KICAgICAgICByOAAAAE4pCdoCb3PaBHBhdGjaBGpvaW7aDF9VTklYQ09ORkRJUtoUX09TX1JFTEVBU0VfQkFTRU5BTUXaD29zX3JlbGVhc2VfZmlsZdoTZGlzdHJvX3JlbGVhc2VfZmlsZdoLaW5jbHVkZV9sc2LaDWluY2x1ZGVfdW5hbWUpBXIqAAAAckAAAAByPgAAAHI/AAAAckEAAAByDwAAAHIPAAAAchAAAAByLAAAAEICAABzCgAAAABIBAEQAQoBBgF6GkxpbnV4RGlzdHJpYnV0aW9uLl9faW5pdF9fYwEAAAAAAAAAAQAAAAMAAABDAAAAcwwAAABkAWoAfABkAo0BUwApA3ogUmV0dXJuIHJlcHIgb2YgYWxsIGluZm8KICAgICAgICBhZQEAAExpbnV4RGlzdHJpYnV0aW9uKG9zX3JlbGVhc2VfZmlsZT17c2VsZi5vc19yZWxlYXNlX2ZpbGUhcn0sIGRpc3Ryb19yZWxlYXNlX2ZpbGU9e3NlbGYuZGlzdHJvX3JlbGVhc2VfZmlsZSFyfSwgaW5jbHVkZV9sc2I9e3NlbGYuaW5jbHVkZV9sc2Ihcn0sIGluY2x1ZGVfdW5hbWU9e3NlbGYuaW5jbHVkZV91bmFtZSFyfSwgX29zX3JlbGVhc2VfaW5mbz17c2VsZi5fb3NfcmVsZWFzZV9pbmZvIXJ9LCBfbHNiX3JlbGVhc2VfaW5mbz17c2VsZi5fbHNiX3JlbGVhc2VfaW5mbyFyfSwgX2Rpc3Ryb19yZWxlYXNlX2luZm89e3NlbGYuX2Rpc3Ryb19yZWxlYXNlX2luZm8hcn0sIF91bmFtZV9pbmZvPXtzZWxmLl91bmFtZV9pbmZvIXJ9KSkBcioAAAApAXIuAAAAKQFyKgAAAHIPAAAAcg8AAAByEAAAANoIX19yZXByX1+QAgAAcwQAAAAABAQJehpMaW51eERpc3RyaWJ1dGlvbi5fX3JlcHJfX2MCAAAAAAAAAAIAAAADAAAAQwAAAHMiAAAAfAFyDHwAagCDAG4GfABqAYMAfABqAoMAfABqA4MAZgNTACkBevgKICAgICAgICBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIE9TIGRpc3RyaWJ1dGlvbiB0aGF0IGlzIGNvbXBhdGlibGUKICAgICAgICB3aXRoIFB5dGhvbidzIDpmdW5jOmBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb25gLCBzdXBwb3J0aW5nIGEgc3Vic2V0CiAgICAgICAgb2YgaXRzIHBhcmFtZXRlcnMuCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5saW51eF9kaXN0cmlidXRpb25gLgogICAgICAgICkEchIAAAByEQAAAHIUAAAAchsAAAApAnIqAAAAcg4AAAByDwAAAHIPAAAAchAAAAByDQAAAJ8CAABzBgAAAAAJEgEGAXokTGludXhEaXN0cmlidXRpb24ubGludXhfZGlzdHJpYnV0aW9uYwEAAAAAAAAAAwAAAAMAAABDAAAAc2wAAABkAWQChAB9AXwAagBkA4MBfQJ8AnIgfAF8AnQBgwJTAHwAagJkBIMBfQJ8AnI4fAF8AnQDgwJTAHwAagRkA4MBfQJ8AnJQfAF8AnQFgwJTAHwAagZkA4MBfQJ8AnJofAF8AnQFgwJTAGQFUwApBnpvUmV0dXJuIHRoZSBkaXN0cm8gSUQgb2YgdGhlIE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBzdHJpbmcuCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5pZGAuCiAgICAgICAgYwIAAAAAAAAAAgAAAAMAAABTAAAAcxwAAAB8AGoAgwBqAWQBZAKDAn0AfAFqAnwAfACDAlMAKQNO+gEg2gFfKQPaBWxvd2Vy2gdyZXBsYWNl2gNnZXQpAtoJZGlzdHJvX2lk2gV0YWJsZXIPAAAAcg8AAAByEAAAANoJbm9ybWFsaXplsgIAAHMEAAAAAAEQAXonTGludXhEaXN0cmlidXRpb24uaWQuPGxvY2Fscz4ubm9ybWFsaXplchEAAADaDmRpc3RyaWJ1dG9yX2lkcjgAAAApB3IhAAAA2hBOT1JNQUxJWkVEX09TX0lEciMAAADaEU5PUk1BTElaRURfTFNCX0lEciQAAADaFE5PUk1BTElaRURfRElTVFJPX0lEciUAAAApA3IqAAAAckoAAABySAAAAHIPAAAAcg8AAAByEAAAAHIRAAAArQIAAHMcAAAAAAUIBAoBBAEKAgoBBAEKAgoBBAEKAgoBBAEKAnoUTGludXhEaXN0cmlidXRpb24uaWRGYwIAAAAAAAAABAAAAAMAAABDAAAAc3wAAAB8AGoAZAGDAXAmfABqAWQCgwFwJnwAagJkAYMBcCZ8AGoDZAGDAX0CfAFydHwAagBkA4MBcD58AGoBZASDAX0CfAJzdHwAagJkAYMBcFZ8AGoDZAGDAX0CfABqBGQFZAaNAX0DfANydHwCZAcXAHwDFwB9AnwCcHpkCFMAKQl6dQogICAgICAgIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgT1MgZGlzdHJpYnV0aW9uLCBhcyBhIHN0cmluZy4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLm5hbWVgLgogICAgICAgIHISAAAAcksAAADaC3ByZXR0eV9uYW1l2gtkZXNjcmlwdGlvblQpAXITAAAAckMAAAByOAAAACkFciEAAAByIwAAAHIkAAAAciUAAAByFAAAACkEcioAAAByEwAAAHISAAAAchQAAAByDwAAAHIPAAAAchAAAAByEgAAAMgCAABzHAAAAAAGCgEKAQoBCgEEAQoBCgEEAQoBCgEMAQQBDAF6FkxpbnV4RGlzdHJpYnV0aW9uLm5hbWVjAwAAAAAAAAAGAAAABwAAAEMAAABzyAAAAHwAagBkAYMBfABqAWQCgwF8AGoCZAGDAXwAagN8AGoAZAODAYMBagRkAWQEgwJ8AGoDfABqAWQFgwGDAWoEZAFkBIMCfABqBWQCgwFnBn0DZAR9BHwCcoh4SnwDRABdJH0FfAVqBmQGgwF8BGoGZAaDAWsEc358BGQEawJyXnwFfQRxXlcAbhx4GnwDRABdEn0FfAVkBGsDco58BX0EUABxjlcAfAFyxHwEcsR8AGoHgwByxGQHagh8BHwAageDAIMCfQR8BFMAKQh6ewogICAgICAgIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgT1MgZGlzdHJpYnV0aW9uLCBhcyBhIHN0cmluZy4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gLgogICAgICAgINoKdmVyc2lvbl9pZNoHcmVsZWFzZXJPAAAAcjgAAAByUAAAANoBLnoJezB9ICh7MX0pKQlyIQAAAHIjAAAAciQAAADaHV9wYXJzZV9kaXN0cm9fcmVsZWFzZV9jb250ZW50ckcAAAByJQAAANoFY291bnRyGwAAAHIuAAAAKQZyKgAAAHITAAAAchUAAADaCHZlcnNpb25zchQAAADaAXZyDwAAAHIPAAAAchAAAAByFAAAAN0CAABzKAAAAAAHCAEIAQgBBAESAQQBEgEMAgQBBAUKARwBCgIKAQgBBAEGARABEAF6GUxpbnV4RGlzdHJpYnV0aW9uLnZlcnNpb25jAgAAAAAAAAAIAAAAAwAAAEMAAABzTAAAAHwAagB8AWQBjQF9AnwCckh0AWoCZAKDAX0DfANqA3wCgwF9BHwEckh8BGoEgwBcA30FfQZ9B3wFfAZwPmQDfAdwRGQDZgNTAGQEUwApBXqbCiAgICAgICAgUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBPUyBkaXN0cmlidXRpb24sIGFzIGEgdHVwbGUgb2YgdmVyc2lvbgogICAgICAgIG51bWJlcnMuCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby52ZXJzaW9uX3BhcnRzYC4KICAgICAgICApAXIVAAAAehcoXGQrKVwuPyhcZCspP1wuPyhcZCspP3I4AAAAKQNyOAAAAHI4AAAAcjgAAAApBXIUAAAA2gJyZdoHY29tcGlsZdoFbWF0Y2jaBmdyb3VwcykIcioAAAByFQAAANoLdmVyc2lvbl9zdHLaDXZlcnNpb25fcmVnZXjaB21hdGNoZXPaBW1ham9y2gVtaW5vcnIZAAAAcg8AAAByDwAAAHIQAAAAchYAAAD/AgAAcxAAAAAABwwBBAEKAQoBBAEOARIBeh9MaW51eERpc3RyaWJ1dGlvbi52ZXJzaW9uX3BhcnRzYwIAAAAAAAAAAgAAAAIAAABDAAAAcw4AAAB8AGoAfAGDAWQBGQBTACkCeoYKICAgICAgICBSZXR1cm4gdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBjdXJyZW50IGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLm1ham9yX3ZlcnNpb25gLgogICAgICAgIHIBAAAAKQFyFgAAACkCcioAAAByFQAAAHIPAAAAcg8AAAByEAAAAHIXAAAADwMAAHMCAAAAAAZ6H0xpbnV4RGlzdHJpYnV0aW9uLm1ham9yX3ZlcnNpb25jAgAAAAAAAAACAAAAAgAAAEMAAABzDgAAAHwAagB8AYMBZAEZAFMAKQJ6hgogICAgICAgIFJldHVybiB0aGUgbWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8ubWlub3JfdmVyc2lvbmAuCiAgICAgICAg6QEAAAApAXIWAAAAKQJyKgAAAHIVAAAAcg8AAAByDwAAAHIQAAAAchgAAAAXAwAAcwIAAAAABnofTGludXhEaXN0cmlidXRpb24ubWlub3JfdmVyc2lvbmMCAAAAAAAAAAIAAAACAAAAQwAAAHMOAAAAfABqAHwBgwFkARkAUwApAnp9CiAgICAgICAgUmV0dXJuIHRoZSBidWlsZCBudW1iZXIgb2YgdGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8uYnVpbGRfbnVtYmVyYC4KICAgICAgICDpAgAAACkBchYAAAApAnIqAAAAchUAAAByDwAAAHIPAAAAchAAAAByGQAAAB8DAABzAgAAAAAGeh5MaW51eERpc3RyaWJ1dGlvbi5idWlsZF9udW1iZXJjAQAAAAAAAAABAAAAAgAAAEMAAABzDgAAAHwAagBkAYMBcAxkAlMAKQN6gwogICAgICAgIFJldHVybiB0aGUgSURzIG9mIGRpc3RyaWJ1dGlvbnMgdGhhdCBhcmUgbGlrZSB0aGUgT1MgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8ubGlrZWAuCiAgICAgICAg2gdpZF9saWtlcjgAAAApAXIhAAAAKQFyKgAAAHIPAAAAcg8AAAByEAAAAHIaAAAAJwMAAHMCAAAAAAZ6FkxpbnV4RGlzdHJpYnV0aW9uLmxpa2VjAQAAAAAAAAABAAAACwAAAEMAAABzOAAAAHkKfABqAGQBGQBTAAQAdAFrCnIyAQABAAEAfABqAmQBgwFwMHwAagNkAYMBcDBkAlMAWABkA1MAKQR6cAogICAgICAgIFJldHVybiB0aGUgY29kZW5hbWUgb2YgdGhlIE9TIGRpc3RyaWJ1dGlvbi4KCiAgICAgICAgRm9yIGRldGFpbHMsIHNlZSA6ZnVuYzpgZGlzdHJvLmNvZGVuYW1lYC4KICAgICAgICByGwAAAHI4AAAATikE2hBfb3NfcmVsZWFzZV9pbmZv2ghLZXlFcnJvcnIjAAAAciQAAAApAXIqAAAAcg8AAAByDwAAAHIQAAAAchsAAAAvAwAAcwwAAAAABgIDCgEOAQoBCgF6GkxpbnV4RGlzdHJpYnV0aW9uLmNvZGVuYW1lYwMAAAAAAAAAAwAAAAgAAABDAAAAc0IAAAB0AHwAagGDAHwAagJ8AXwCgwJ0AHwAagN8AoMBfABqBHwCgwF8AGoFfAKDAWQBjQN8AGoGgwB8AGoHgwBkAo0FUwApA3qPCiAgICAgICAgUmV0dXJuIGNlcnRhaW4gbWFjaGluZS1yZWFkYWJsZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgT1MKICAgICAgICBkaXN0cmlidXRpb24uCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5pbmZvYC4KICAgICAgICApA3JfAAAAcmAAAAByGQAAACkFchEAAAByFAAAAHIWAAAAchoAAAByGwAAACkI2gRkaWN0chEAAAByFAAAAHIXAAAAchgAAAByGQAAAHIaAAAAchsAAAApA3IqAAAAchMAAAByFQAAAHIPAAAAcg8AAAByEAAAAHIcAAAAPgMAAHMSAAAAAAcCAQYBCgECAQgBCAEMAgYBehZMaW51eERpc3RyaWJ1dGlvbi5pbmZvYwEAAAAAAAAAAQAAAAEAAABDAAAAcwYAAAB8AGoAUwApAXrZCiAgICAgICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgdGhlIGluZm9ybWF0aW9uCiAgICAgICAgaXRlbXMgZnJvbSB0aGUgb3MtcmVsZWFzZSBmaWxlIGRhdGEgc291cmNlIG9mIHRoZSBPUyBkaXN0cmlidXRpb24uCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5vc19yZWxlYXNlX2luZm9gLgogICAgICAgICkBcmQAAAApAXIqAAAAcg8AAAByDwAAAHIQAAAAch0AAABRAwAAcwIAAAAAB3ohTGludXhEaXN0cmlidXRpb24ub3NfcmVsZWFzZV9pbmZvYwEAAAAAAAAAAQAAAAEAAABDAAAAcwYAAAB8AGoAUwApAXrmCiAgICAgICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgdGhlIGluZm9ybWF0aW9uCiAgICAgICAgaXRlbXMgZnJvbSB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCBkYXRhIHNvdXJjZSBvZiB0aGUgT1MKICAgICAgICBkaXN0cmlidXRpb24uCgogICAgICAgIEZvciBkZXRhaWxzLCBzZWUgOmZ1bmM6YGRpc3Ryby5sc2JfcmVsZWFzZV9pbmZvYC4KICAgICAgICApAdoRX2xzYl9yZWxlYXNlX2luZm8pAXIqAAAAcg8AAAByDwAAAHIQAAAAch4AAABaAwAAcwIAAAAACHoiTGludXhEaXN0cmlidXRpb24ubHNiX3JlbGVhc2VfaW5mb2MBAAAAAAAAAAEAAAABAAAAQwAAAHMGAAAAfABqAFMAKQF66QogICAgICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBpbmZvcm1hdGlvbgogICAgICAgIGl0ZW1zIGZyb20gdGhlIGRpc3RybyByZWxlYXNlIGZpbGUgZGF0YSBzb3VyY2Ugb2YgdGhlIE9TCiAgICAgICAgZGlzdHJpYnV0aW9uLgoKICAgICAgICBGb3IgZGV0YWlscywgc2VlIDpmdW5jOmBkaXN0cm8uZGlzdHJvX3JlbGVhc2VfaW5mb2AuCiAgICAgICAgKQHaFF9kaXN0cm9fcmVsZWFzZV9pbmZvKQFyKgAAAHIPAAAAcg8AAAByEAAAAHIfAAAAZAMAAHMCAAAAAAh6JUxpbnV4RGlzdHJpYnV0aW9uLmRpc3Ryb19yZWxlYXNlX2luZm9jAQAAAAAAAAABAAAAAQAAAEMAAABzBgAAAHwAagBTACkBetIKICAgICAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJz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UwBxtlcAaQBTAGQUUwApFXqgCiAgICAgICAgR2V0IHRoZSBpbmZvcm1hdGlvbiBpdGVtcyBmcm9tIHRoZSBzcGVjaWZpZWQgZGlzdHJvIHJlbGVhc2UgZmlsZS4KCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYWxsIGluZm9ybWF0aW9uIGl0ZW1zLgogICAgICAgIHISAAAA2gpjbG91ZGxpbnV4chEAAAByYQAAAHoMU3VTRS1yZWxlYXNlegxhcmNoLXJlbGVhc2V6DGJhc2UtcmVsZWFzZXoOY2VudG9zLXJlbGVhc2V6DmZlZG9yYS1yZWxlYXNleg5nZW50b28tcmVsZWFzZXoObWFnZWlhLXJlbGVhc2V6EG1hbmRyYWtlLXJlbGVhc2V6EG1hbmRyaXZhLXJlbGVhc2V6FW1hbmRyaXZhbGludXgtcmVsZWFzZXoPbWFuamFyby1yZWxlYXNleg5vcmFjbGUtcmVsZWFzZXoOcmVkaGF0LXJlbGVhc2V6CnNsLXJlbGVhc2V6EXNsYWNrd2FyZS12ZXJzaW9uTikPcj8AAADaGl9wYXJzZV9kaXN0cm9fcmVsZWFzZV9maWxlcjkAAAByOgAAANoIYmFzZW5hbWXaIF9ESVNUUk9fUkVMRUFTRV9CQVNFTkFNRV9QQVRURVJOcloAAAByRQAAAHJ+AAAA2gdsaXN0ZGlycjwAAADaBHNvcnRyjQAAANogX0RJU1RST19SRUxFQVNFX0lHTk9SRV9CQVNFTkFNRVNyOwAAACkGcioAAADaC2Rpc3Ryb19pbmZvcqcAAAByWgAAANoJYmFzZW5hbWVz2ghmaWxlcGF0aHIPAAAAcg8AAAByEAAAAHJoAAAAPgQAAHNYAAAAAAgGAwQBCAEOBQoBCAEQAQoBBAEOAQQCAgEKBAwBDgUCAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBDAEKAQgBAgEKAQQBDgEKAQgCBgEOARIBCAEIAXomTGludXhEaXN0cmlidXRpb24uX2Rpc3Ryb19yZWxlYXNlX2luZm9jAgAAAAAAAAADAAAADwAAAEMAAABzQAAAAHkidAB8AYMBjxB9AnwAagF8AmoCgwCDAVMAUQBSAFgAVwBuGAQAdAN0BGYCawpy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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 8
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
appdirs.cpython-36.pyc
21.10 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
contextlib2.cpython-36.pyc
15.03 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
distro.cpython-36.pyc
35.84 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ipaddress.cpython-36.pyc
65.02 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
pyparsing.cpython-36.pyc
237.48 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
retrying.cpython-36.pyc
7.93 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
six.cpython-36.pyc
26.42 KB
lrw-r--r--
2023-11-13 21:24:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-36.pyc
2.93 KB
lrw-r--r--
2023-11-13 21:24:39
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).