REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 40.83 KB
Close
/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/engine/__pycache__/interfaces.cpython-37.pyc
Text
Base64
Qg0NCgAAAADDzDRdnaUAAOMAAAAAAAAAAAAAAAAEAAAAQAAAAHN8AAAAZABaAGQBZAJsAW0CWgIBAGQBZANsA20EWgQBAGQBZARsA20FWgUBAEcAZAVkBoQAZAZlBoMDWgdHAGQHZAiEAGQIZQaDA1oIRwBkCWQKhABkCmUGgwNaCUcAZAtkDIQAZAxlBoMDWgpHAGQNZA6EAGQOZQaDA1oLZA9TACkQejFEZWZpbmUgY29yZSBpbnRlcmZhY2VzIHVzZWQgYnkgdGhlIGVuZ2luZSBzeXN0ZW0u6QIAAAApAdoEdXRpbCkB2ghDb21waWxlZCkB2gxUeXBlQ29tcGlsZXJjAAAAAAAAAAAAAAAABAAAAEAAAABzxAEAAGUAWgFkAFoCZAFaA2QCWgRkA2QEhABaBWUGZAVkBoQAgwFaB2QHZAiEAFoIZAlkCoQAWglkY2QMZA2EAVoKZQugDGQOZA+hAmRkZBBkEYQBgwFaDWRlZBJkE4QBWg5kZmQUZBWEAVoPZGdkFmQXhAFaEGRoZBhkGYQBWhFkaWQaZBuEAVoSZGpkHGQdhAFaE2RrZB5kH4QBWhRkbGQgZCGEAVoVZG1kImQjhAFaFmRuZCRkJYQBWhdkb2QmZCeEAVoYZChkKYQAWhlkKmQrhABaGmRwZCxkLYQBWhtkcWQuZC+EAVocZDBkMYQAWh1kMmQzhABaHmQ0ZDWEAFofZDZkN4QAWiBkOGQ5hABaIWQ6ZDuEAFoiZDxkPYQAWiNkPmQ/hABaJGRAZEGEAFolZEJkQ4QAWiZkRGRFhABaJ2RGZEeEAFooZHJkSWRKhAFaKWRzZEtkTIQBWipkTWROhABaK2R0ZE9kUIQBWixkdWRRZFKEAVotZHZkU2RUhAFaLmRVZFaEAFovZFdkWIQAWjBkWWRahABaMWRbZFyEAFoyZF1kXoQAWjNlBmRfZGCEAIMBWjRlBmRhZGKEAIMBWjVkC1MAKXfaB0RpYWxlY3RhhxMAAERlZmluZSB0aGUgYmVoYXZpb3Igb2YgYSBzcGVjaWZpYyBkYXRhYmFzZSBhbmQgREItQVBJIGNvbWJpbmF0aW9uLgoKICAgIEFueSBhc3BlY3Qgb2YgbWV0YWRhdGEgZGVmaW5pdGlvbiwgU1FMIHF1ZXJ5IGdlbmVyYXRpb24sCiAgICBleGVjdXRpb24sIHJlc3VsdC1zZXQgaGFuZGxpbmcsIG9yIGFueXRoaW5nIGVsc2Ugd2hpY2ggdmFyaWVzCiAgICBiZXR3ZWVuIGRhdGFiYXNlcyBpcyBkZWZpbmVkIHVuZGVyIHRoZSBnZW5lcmFsIGNhdGVnb3J5IG9mIHRoZQogICAgRGlhbGVjdC4gIFRoZSBEaWFsZWN0IGFjdHMgYXMgYSBmYWN0b3J5IGZvciBvdGhlcgogICAgZGF0YWJhc2Utc3BlY2lmaWMgb2JqZWN0IGltcGxlbWVudGF0aW9ucyBpbmNsdWRpbmcKICAgIEV4ZWN1dGlvbkNvbnRleHQsIENvbXBpbGVkLCBEZWZhdWx0R2VuZXJhdG9yLCBhbmQgVHlwZUVuZ2luZS4KCiAgICBBbGwgRGlhbGVjdHMgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKCiAgICBuYW1lCiAgICAgIGlkZW50aWZ5aW5nIG5hbWUgZm9yIHRoZSBkaWFsZWN0IGZyb20gYSBEQkFQSS1uZXV0cmFsIHBvaW50IG9mIHZpZXcKICAgICAgKGkuZS4gJ3NxbGl0ZScpCgogICAgZHJpdmVyCiAgICAgIGlkZW50aWZ5aW5nIG5hbWUgZm9yIHRoZSBkaWFsZWN0J3MgREJBUEkKCiAgICBwb3NpdGlvbmFsCiAgICAgIFRydWUgaWYgdGhlIHBhcmFtc3R5bGUgZm9yIHRoaXMgRGlhbGVjdCBpcyBwb3NpdGlvbmFsLgoKICAgIHBhcmFtc3R5bGUKICAgICAgdGhlIHBhcmFtc3R5bGUgdG8gYmUgdXNlZCAoc29tZSBEQi1BUElzIHN1cHBvcnQgbXVsdGlwbGUKICAgICAgcGFyYW1zdHlsZXMpLgoKICAgIGNvbnZlcnRfdW5pY29kZQogICAgICBUcnVlIGlmIFVuaWNvZGUgY29udmVyc2lvbiBzaG91bGQgYmUgYXBwbGllZCB0byBhbGwgYGBzdHJgYAogICAgICB0eXBlcy4KCiAgICBlbmNvZGluZwogICAgICB0eXBlIG9mIGVuY29kaW5nIHRvIHVzZSBmb3IgdW5pY29kZSwgdXN1YWxseSBkZWZhdWx0cyB0bwogICAgICAndXRmLTgnLgoKICAgIHN0YXRlbWVudF9jb21waWxlcgogICAgICBhIDpjbGFzczpgLkNvbXBpbGVkYCBjbGFzcyB1c2VkIHRvIGNvbXBpbGUgU1FMIHN0YXRlbWVudHMKCiAgICBkZGxfY29tcGlsZXIKICAgICAgYSA6Y2xhc3M6YC5Db21waWxlZGAgY2xhc3MgdXNlZCB0byBjb21waWxlIERETCBzdGF0ZW1lbnRzCgogICAgc2VydmVyX3ZlcnNpb25faW5mbwogICAgICBhIHR1cGxlIGNvbnRhaW5pbmcgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERCIGJhY2tlbmQgaW4gdXNlLgogICAgICBUaGlzIHZhbHVlIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBzdXBwb3J0aW5nIGRpYWxlY3RzLCBhbmQgaXMKICAgICAgdHlwaWNhbGx5IHBvcHVsYXRlZCBkdXJpbmcgdGhlIGluaXRpYWwgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2UuCgogICAgZGVmYXVsdF9zY2hlbWFfbmFtZQogICAgIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHNjaGVtYS4gIFRoaXMgdmFsdWUgaXMgb25seSBhdmFpbGFibGUgZm9yCiAgICAgc3VwcG9ydGluZyBkaWFsZWN0cywgYW5kIGlzIHR5cGljYWxseSBwb3B1bGF0ZWQgZHVyaW5nIHRoZQogICAgIGluaXRpYWwgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2UuCgogICAgZXhlY3V0aW9uX2N0eF9jbHMKICAgICAgYSA6Y2xhc3M6YC5FeGVjdXRpb25Db250ZXh0YCBjbGFzcyB1c2VkIHRvIGhhbmRsZSBzdGF0ZW1lbnQgZXhlY3V0aW9uCgogICAgZXhlY3V0ZV9zZXF1ZW5jZV9mb3JtYXQKICAgICAgZWl0aGVyIHRoZSAndHVwbGUnIG9yICdsaXN0JyB0eXBlLCBkZXBlbmRpbmcgb24gd2hhdCBjdXJzb3IuZXhlY3V0ZSgpCiAgICAgIGFjY2VwdHMgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgKHRoZXkgdmFyeSkuCgogICAgcHJlcGFyZXIKICAgICAgYSA6Y2xhc3M6YH5zcWxhbGNoZW15LnNxbC5jb21waWxlci5JZGVudGlmaWVyUHJlcGFyZXJgIGNsYXNzIHVzZWQgdG8KICAgICAgcXVvdGUgaWRlbnRpZmllcnMuCgogICAgc3VwcG9ydHNfYWx0ZXIKICAgICAgYGBUcnVlYGAgaWYgdGhlIGRhdGFiYXNlIHN1cHBvcnRzIGBgQUxURVIgVEFCTEVgYC4KCiAgICBtYXhfaWRlbnRpZmllcl9sZW5ndGgKICAgICAgVGhlIG1heGltdW0gbGVuZ3RoIG9mIGlkZW50aWZpZXIgbmFtZXMuCgogICAgc3VwcG9ydHNfdW5pY29kZV9zdGF0ZW1lbnRzCiAgICAgIEluZGljYXRlIHdoZXRoZXIgdGhlIERCLUFQSSBjYW4gcmVjZWl2ZSBTUUwgc3RhdGVtZW50cyBhcyBQeXRob24KICAgICAgdW5pY29kZSBzdHJpbmdzCgogICAgc3VwcG9ydHNfdW5pY29kZV9iaW5kcwogICAgICBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBEQi1BUEkgY2FuIHJlY2VpdmUgc3RyaW5nIGJpbmQgcGFyYW1ldGVycwogICAgICBhcyBQeXRob24gdW5pY29kZSBzdHJpbmdzCgogICAgc3VwcG9ydHNfc2FuZV9yb3djb3VudAogICAgICBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBkaWFsZWN0IHByb3Blcmx5IGltcGxlbWVudHMgcm93Y291bnQgZm9yCiAgICAgIGBgVVBEQVRFYGAgYW5kIGBgREVMRVRFYGAgc3RhdGVtZW50cy4KCiAgICBzdXBwb3J0c19zYW5lX211bHRpX3Jvd2NvdW50CiAgICAgIEluZGljYXRlIHdoZXRoZXIgdGhlIGRpYWxlY3QgcHJvcGVybHkgaW1wbGVtZW50cyByb3djb3VudCBmb3IKICAgICAgYGBVUERBVEVgYCBhbmQgYGBERUxFVEVgYCBzdGF0ZW1lbnRzIHdoZW4gZXhlY3V0ZWQgdmlhCiAgICAgIGV4ZWN1dGVtYW55LgoKICAgIHByZWV4ZWN1dGVfYXV0b2luY3JlbWVudF9zZXF1ZW5jZXMKICAgICAgVHJ1ZSBpZiAnaW1wbGljaXQnIHByaW1hcnkga2V5IGZ1bmN0aW9ucyBtdXN0IGJlIGV4ZWN1dGVkIHNlcGFyYXRlbHkKICAgICAgaW4gb3JkZXIgdG8gZ2V0IHRoZWlyIHZhbHVlLiAgIFRoaXMgaXMgY3VycmVudGx5IG9yaWVudGVkIHRvd2FyZHMKICAgICAgUG9zdGdyZVNRTC4KCiAgICBpbXBsaWNpdF9yZXR1cm5pbmcKICAgICAgdXNlIFJFVFVSTklORyBvciBlcXVpdmFsZW50IGR1cmluZyBJTlNFUlQgZXhlY3V0aW9uIGluIG9yZGVyIHRvIGxvYWQKICAgICAgbmV3bHkgZ2VuZXJhdGVkIHByaW1hcnkga2V5cyBhbmQgb3RoZXIgY29sdW1uIGRlZmF1bHRzIGluIG9uZSBleGVjdXRpb24sCiAgICAgIHdoaWNoIGFyZSB0aGVuIGF2YWlsYWJsZSB2aWEgaW5zZXJ0ZWRfcHJpbWFyeV9rZXkuCiAgICAgIElmIGFuIGluc2VydCBzdGF0ZW1lbnQgaGFzIHJldHVybmluZygpIHNwZWNpZmllZCBleHBsaWNpdGx5LAogICAgICB0aGUgImltcGxpY2l0IiBmdW5jdGlvbmFsaXR5IGlzIG5vdCB1c2VkIGFuZCBpbnNlcnRlZF9wcmltYXJ5X2tleQogICAgICB3aWxsIG5vdCBiZSBhdmFpbGFibGUuCgogICAgY29sc3BlY3MKICAgICAgQSBkaWN0aW9uYXJ5IG9mIFR5cGVFbmdpbmUgY2xhc3NlcyBmcm9tIHNxbGFsY2hlbXkudHlwZXMgbWFwcGVkCiAgICAgIHRvIHN1YmNsYXNzZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIGRpYWxlY3QgY2xhc3MuICBUaGlzCiAgICAgIGRpY3Rpb25hcnkgaXMgY2xhc3MtbGV2ZWwgb25seSBhbmQgaXMgbm90IGFjY2Vzc2VkIGZyb20gdGhlCiAgICAgIGRpYWxlY3QgaW5zdGFuY2UgaXRzZWxmLgoKICAgIHN1cHBvcnRzX2RlZmF1bHRfdmFsdWVzCiAgICAgIEluZGljYXRlcyBpZiB0aGUgY29uc3RydWN0IGBgSU5TRVJUIElOVE8gdGFibGVuYW1lIERFRkFVTFQKICAgICAgVkFMVUVTYGAgaXMgc3VwcG9ydGVkCgogICAgc3VwcG9ydHNfc2VxdWVuY2VzCiAgICAgIEluZGljYXRlcyBpZiB0aGUgZGlhbGVjdCBzdXBwb3J0cyBDUkVBVEUgU0VRVUVOQ0Ugb3Igc2ltaWxhci4KCiAgICBzZXF1ZW5jZXNfb3B0aW9uYWwKICAgICAgSWYgVHJ1ZSwgaW5kaWNhdGVzIGlmIHRoZSAib3B0aW9uYWwiIGZsYWcgb24gdGhlIFNlcXVlbmNlKCkgY29uc3RydWN0CiAgICAgIHNob3VsZCBzaWduYWwgdG8gbm90IGdlbmVyYXRlIGEgQ1JFQVRFIFNFUVVFTkNFLiBBcHBsaWVzIG9ubHkgdG8KICAgICAgZGlhbGVjdHMgdGhhdCBzdXBwb3J0IHNlcXVlbmNlcy4gQ3VycmVudGx5IHVzZWQgb25seSB0byBhbGxvdyBQb3N0Z3JlU1FMCiAgICAgIFNFUklBTCB0byBiZSB1c2VkIG9uIGEgY29sdW1uIHRoYXQgc3BlY2lmaWVzIFNlcXVlbmNlKCkgZm9yIHVzYWdlIG9uCiAgICAgIG90aGVyIGJhY2tlbmRzLgoKICAgIHN1cHBvcnRzX25hdGl2ZV9lbnVtCiAgICAgIEluZGljYXRlcyBpZiB0aGUgZGlhbGVjdCBzdXBwb3J0cyBhIG5hdGl2ZSBFTlVNIGNvbnN0cnVjdC4KICAgICAgVGhpcyB3aWxsIHByZXZlbnQgdHlwZXMuRW51bSBmcm9tIGdlbmVyYXRpbmcgYSBDSEVDSwogICAgICBjb25zdHJhaW50IHdoZW4gdGhhdCB0eXBlIGlzIHVzZWQuCgogICAgc3VwcG9ydHNfbmF0aXZlX2Jvb2xlYW4KICAgICAgSW5kaWNhdGVzIGlmIHRoZSBkaWFsZWN0IHN1cHBvcnRzIGEgbmF0aXZlIGJvb2xlYW4gY29uc3RydWN0LgogICAgICBUaGlzIHdpbGwgcHJldmVudCB0eXBlcy5Cb29sZWFuIGZyb20gZ2VuZXJhdGluZyBhIENIRUNLCiAgICAgIGNvbnN0cmFpbnQgd2hlbiB0aGF0IHR5cGUgaXMgdXNlZC4KCiAgICBkYmFwaV9leGNlcHRpb25fdHJhbnNsYXRpb25fbWFwCiAgICAgICBBIGRpY3Rpb25hcnkgb2YgbmFtZXMgdGhhdCB3aWxsIGNvbnRhaW4gYXMgdmFsdWVzIHRoZSBuYW1lcyBvZgogICAgICAgcGVwLTI0OSBleGNlcHRpb25zICgiSW50ZWdyaXR5RXJyb3IiLCAiT3BlcmF0aW9uYWxFcnJvciIsIGV0YykKICAgICAgIGtleWVkIHRvIGFsdGVybmF0ZSBjbGFzcyBuYW1lcywgdG8gc3VwcG9ydCB0aGUgY2FzZSB3aGVyZSBhCiAgICAgICBEQkFQSSBoYXMgZXhjZXB0aW9uIGNsYXNzZXMgdGhhdCBhcmVuJ3QgbmFtZWQgYXMgdGhleSBhcmUKICAgICAgIHJlZmVycmVkIHRvIChlLmcuIEludGVncml0eUVycm9yID0gTXlFeGNlcHRpb24pLiAgIEluIHRoZSB2YXN0CiAgICAgICBtYWpvcml0eSBvZiBjYXNlcyB0aGlzIGRpY3Rpb25hcnkgaXMgZW1wdHkuCgogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4wLjUKCiAgICBGYwIAAAAAAAAAAgAAAAEAAABDAAAAcwoAAAB0AIMAggFkAVMAKQJ68kJ1aWxkIERCLUFQSSBjb21wYXRpYmxlIGNvbm5lY3Rpb24gYXJndW1lbnRzLgoKICAgICAgICBHaXZlbiBhIDpjbGFzczpgfnNxbGFsY2hlbXkuZW5naW5lLnVybC5VUkxgIG9iamVjdCwgcmV0dXJucyBhIHR1cGxlCiAgICAgICAgY29uc2lzdGluZyBvZiBhIGAqYXJnc2AvYCoqa3dhcmdzYCBzdWl0YWJsZSB0byBzZW5kIGRpcmVjdGx5CiAgICAgICAgdG8gdGhlIGRiYXBpJ3MgY29ubmVjdCBmdW5jdGlvbi4KCiAgICAgICAgTikB2hNOb3RJbXBsZW1lbnRlZEVycm9yKQLaBHNlbGbaA3VybKkAcgkAAAD6Ty9vcHQvYWx0L3B5dGhvbjM3L2xpYjY0L3B5dGhvbjMuNy9zaXRlLXBhY2thZ2VzL3NxbGFsY2hlbXkvZW5naW5lL2ludGVyZmFjZXMucHnaE2NyZWF0ZV9jb25uZWN0X2FyZ3OcAAAAcwIAAAAACXobRGlhbGVjdC5jcmVhdGVfY29ubmVjdF9hcmdzYwIAAAAAAAAAAgAAAAEAAABDAAAAcwoAAAB0AIMAggFkAVMAKQJhNAEAAFRyYW5zZm9ybSBhIGdlbmVyaWMgdHlwZSB0byBhIGRpYWxlY3Qtc3BlY2lmaWMgdHlwZS4KCiAgICAgICAgRGlhbGVjdCBjbGFzc2VzIHdpbGwgdXN1YWxseSB1c2UgdGhlCiAgICAgICAgOmZ1bmM6YC50eXBlcy5hZGFwdF90eXBlYCBmdW5jdGlvbiBpbiB0aGUgdHlwZXMgbW9kdWxlIHRvCiAgICAgICAgYWNjb21wbGlzaCB0aGlzLgoKICAgICAgICBUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIGNhY2hlZCAqcGVyIGRpYWxlY3QgY2xhc3MqIHNvIGNhbgogICAgICAgIGNvbnRhaW4gbm8gZGlhbGVjdC1pbnN0YW5jZSBzdGF0ZS4KCiAgICAgICAgTikBcgYAAAApAtoDY2xz2gd0eXBlb2JqcgkAAAByCQAAAHIKAAAA2g90eXBlX2Rlc2NyaXB0b3KnAAAAcwIAAAAADXoXRGlhbGVjdC50eXBlX2Rlc2NyaXB0b3JjAgAAAAAAAAACAAAAAQAAAEMAAABzBAAAAGQBUwApAmGAAQAAQ2FsbGVkIGR1cmluZyBzdHJhdGVnaXplZCBjcmVhdGlvbiBvZiB0aGUgZGlhbGVjdCB3aXRoIGEKICAgICAgICBjb25uZWN0aW9uLgoKICAgICAgICBBbGxvd3MgZGlhbGVjdHMgdG8gY29uZmlndXJlIG9wdGlvbnMgYmFzZWQgb24gc2VydmVyIHZlcnNpb24gaW5mbyBvcgogICAgICAgIG90aGVyIHByb3BlcnRpZXMuCgogICAgICAgIFRoZSBjb25uZWN0aW9uIHBhc3NlZCBoZXJlIGlzIGEgU1FMQWxjaGVteSBDb25uZWN0aW9uIG9iamVjdCwKICAgICAgICB3aXRoIGZ1bGwgY2FwYWJpbGl0aWVzLgoKICAgICAgICBUaGUgaW5pdGlhbGl6ZSgpIG1ldGhvZCBvZiB0aGUgYmFzZSBkaWFsZWN0IHNob3VsZCBiZSBjYWxsZWQgdmlhCiAgICAgICAgc3VwZXIoKS4KCiAgICAgICAgTnIJAAAAKQJyBwAAANoKY29ubmVjdGlvbnIJAAAAcgkAAAByCgAAANoKaW5pdGlhbGl6ZbYAAABzAgAAAAAPehJEaWFsZWN0LmluaXRpYWxpemVjBgAAAAAAAAAGAAAAAQAAAEMAAABzCgAAAHQAgwCCAWQBUwApAmFyAgAATG9hZCB0YWJsZSBkZXNjcmlwdGlvbiBmcm9tIHRoZSBkYXRhYmFzZS4KCiAgICAgICAgR2l2ZW4gYSA6Y2xhc3M6YC5Db25uZWN0aW9uYCBhbmQgYQogICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBvYmplY3QsIHJlZmxlY3QgaXRzIGNvbHVtbnMgYW5kCiAgICAgICAgcHJvcGVydGllcyBmcm9tIHRoZSBkYXRhYmFzZS4KCiAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGJ5CiAgICAgICAgOm1ldGg6YC5EZWZhdWx0RGlhbGVjdC5yZWZsZWN0dGFibGVgLCB3aGljaCBtYWtlcyB1c2Ugb2YKICAgICAgICA6Y2xhc3M6YC5JbnNwZWN0b3JgIHRvIHJldHJpZXZlIGNvbHVtbiBpbmZvcm1hdGlvbi4KCiAgICAgICAgRGlhbGVjdHMgc2hvdWxkICoqbm90Kiogc2VlayB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2QsIGFuZCBzaG91bGQKICAgICAgICBpbnN0ZWFkIGltcGxlbWVudCBpbmRpdmlkdWFsIHNjaGVtYSBpbnNwZWN0aW9uIG9wZXJhdGlvbnMgc3VjaCBhcwogICAgICAgIDptZXRoOmAuRGlhbGVjdC5nZXRfY29sdW1uc2AsIDptZXRoOmAuRGlhbGVjdC5nZXRfcGtfY29uc3RyYWludGAsCiAgICAgICAgZXRjLgoKICAgICAgICBOKQFyBgAAACkGcgcAAAByDwAAANoFdGFibGVaD2luY2x1ZGVfY29sdW1uc1oPZXhjbHVkZV9jb2x1bW5zWgtyZXNvbHZlX2Zrc3IJAAAAcgkAAAByCgAAANoMcmVmbGVjdHRhYmxlxwAAAHMCAAAAABR6FERpYWxlY3QucmVmbGVjdHRhYmxlTmMEAAAAAAAAAAUAAAABAAAASwAAAHMKAAAAdACDAIIBZAFTACkCYQ0DAABSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgY29sdW1ucyBpbiBgdGFibGVfbmFtZWAuCgogICAgICAgIEdpdmVuIGEgOmNsYXNzOmAuQ29ubmVj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cmluZyBgdGFibGVfbmFtZWAgYW5kIGFuIG9wdGlvbmFsIHN0cmluZyBgc2NoZW1hYCwgcmV0dXJuCiAgICAgICAgdW5pcXVlIGNvbnN0cmFpbnQgaW5mb3JtYXRpb24gYXMgYSBsaXN0IG9mIGRpY3RzIHdpdGggdGhlc2Uga2V5czoKCiAgICAgICAgbmFtZQogICAgICAgICAgdGhlIHVuaXF1ZSBjb25zdHJhaW50J3MgbmFtZQoKICAgICAgICBjb2x1bW5fbmFtZXMKICAgICAgICAgIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGluIG9yZGVyCgogICAgICAgIFwqKmt3CiAgICAgICAgICBvdGhlciBvcHRpb25zIHBhc3NlZCB0byB0aGUgZGlhbGVjdCdzIGdldF91bmlxdWVfY29uc3RyYWludHMoKQogICAgICAgICAgbWV0aG9kLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjkuMAoKICAgICAgICBOKQFyBgAAACkFcgcAAAByDwAAAHITAAAAchQAAAByFQAAAHIJAAAAcgkAAAByCgAAANoWZ2V0X3VuaXF1ZV9jb25zdHJhaW50c3EBAABzAgAAAAAWeh5EaWFsZWN0LmdldF91bmlxdWVfY29uc3RyYWludHNjBAAAAAAAAAAFAAAAAQAAAEsAAABzCgAAAHQAgwCCAWQBUwApAmHaAQAAUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IGNoZWNrIGNvbnN0cmFpbnRzIGluIGB0YWJsZV9uYW1lYC4KCiAgICAgICAgR2l2ZW4gYSBzdHJpbmcgYHRhYmxlX25hbWVgIGFuZCBhbiBvcHRpb25hbCBzdHJpbmcgYHNjaGVtYWAsIHJldHVybgogICAgICAgIGNoZWNrIGNvbnN0cmFpbnQgaW5mb3JtYXRpb24gYXMgYSBsaXN0IG9mIGRpY3RzIHdpdGggdGhlc2Uga2V5czoKCiAgICAgICAgbmFtZQogICAgICAgICAgdGhlIGNoZWNrIGNvbnN0cmFpbnQncyBuYW1lCgogICAgICAgIHNxbHRleHQKICAgICAgICAgIHRoZSBjaGVjayBjb25zdHJhaW50J3MgU1FMIGV4cHJlc3Npb24KCiAgICAgICAgXCoqa3cKICAg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aGFzX3RhYmxlxQEAAHMCAAAAAAl6EURpYWxlY3QuaGFzX3RhYmxlYwQAAAAAAAAABAAAAAEAAABDAAAAcwoAAAB0AIMAggFkAVMAKQJ67ENoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBwYXJ0aWN1bGFyIHNlcXVlbmNlIGluIHRoZSBkYXRhYmFzZS4KCiAgICAgICAgR2l2ZW4gYSA6Y2xhc3M6YC5Db25uZWN0aW9uYCBvYmplY3QgYW5kIGEgc3RyaW5nCiAgICAgICAgYHNlcXVlbmNlX25hbWVgLCByZXR1cm4gVHJ1ZSBpZiB0aGUgZ2l2ZW4gc2VxdWVuY2UgZXhpc3RzIGluCiAgICAgICAgdGhlIGRhdGFiYXNlLCBGYWxzZSBvdGhlcndpc2UuCiAgICAgICAgTikBcgYAAAApBHIHAAAAcg8AAABaDXNlcXVlbmNlX25hbWVyFAAAAHIJAAAAcgkAAAByCgAAANoMaGFzX3NlcXVlbmNl0AEAAHMCAAAAAAh6FERpYWxlY3QuaGFzX3NlcXVlbmNlYwIAAAAAAAAAAgAAAAEAAABDAAAAcwoAAAB0AIMAggFkAVMAKQJ66FJldHJpZXZlIHRoZSBzZXJ2ZXIgdmVyc2lvbiBpbmZvIGZyb20gdGhlIGdpdmVuIGNvbm5lY3Rpb24uCgogICAgICAgIFRoaXMgaXMgdXNlZCBieSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0byBwb3B1bGF0ZSB0aGUKICAgICAgICAic2VydmVyX3ZlcnNpb25faW5mbyIgYXR0cmlidXRlIGFuZCBpcyBjYWxsZWQgZXhhY3RseQogICAgICAgIG9uY2UgdXBvbiBmaXJzdCBjb25uZWN0LgoKICAgICAgICBOKQFyBgAAACkCcgcAAAByDwAAAHIJAAAAcgkAAAByCgAAANoYX2dldF9zZXJ2ZXJfdmVyc2lvbl9pbmZv2gEAAHMCAAAAAAl6IERpYWxlY3QuX2dldF9zZXJ2ZXJfdmVyc2lvbl9pbmZvYwIAAAAAAAAAAgAAAAEAAABDAAAAcwoAAAB0AIMAggFkAVMAKQJhBwEAAFJldHVybiB0aGUgc3RyaW5nIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzY2hlbWEgZnJvbQogICAgICAgIHRoZSBnaXZlbiBjb25uZWN0aW9uLgoKICAgICAgICBUaGlzIGlzIHVzZWQgYnkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdG8gcG9wdWxhdGUgdGhlCiAgICAgICAgImRlZmF1bHRfc2NoZW1hX25hbWUiIGF0dHJpYnV0ZSBhbmQgaXMgY2FsbGVkIGV4YWN0bHkKICAgICAgICBvbmNlIHVwb24gZmlyc3QgY29ubmVjdC4KCiAgICAgICAgTikBcgYAAAApAnIHAAAAcg8AAAByCQAAAHIJAAAAcgoAAADaGF9nZXRfZGVmYXVsdF9zY2hlbWFfbmFtZeUBAABzAgAAAAAKeiBEaWFsZWN0Ll9nZXRfZGVmYXVsdF9zY2hlbWFfbmFtZWMCAAAAAAAAAAIAAAABAAAAQwAAAHMKAAAAdACDAIIBZAFTACkCYS8DAABQcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIGBgY29ubmVjdGlvbi5iZWdpbigpYGAsIGdpdmVuIGEKICAgICAgICBEQi1BUEkgY29ubmVjdGlvbi4KCiAgICAgICAgVGhlIERCQVBJIGhhcyBubyBkZWRpY2F0ZWQgImJlZ2luIiBtZXRob2QgYW5kIGl0IGlzIGV4cGVjdGVkCiAgICAgICAgdGhhdCB0cmFuc2FjdGlvbnMgYXJlIGltcGxpY2l0LiAgVGhpcyBob29rIGlzIHByb3ZpZGVkIGZvciB0aG9zZQogICAgICAgIERCQVBJcyB0aGF0IG1pZ2h0IG5lZWQgYWRkaXRpb25hbCBoZWxwIGluIHRoaXMgYXJlYS4KCiAgICAgICAgTm90ZSB0aGF0IDptZXRoOmAuRGlhbGVjdC5kb19iZWdpbmAgaXMgbm90IGNhbGxlZCB1bmxlc3MgYQogICAgICAgIDpjbGFzczpgLlRyYW5zYWN0aW9uYCBvYmplY3QgaXMgaW4gdXNlLiAgVGhlCiAgICAgICAgOm1ldGg6YC5EaWFsZWN0LmRvX2F1dG9jb21taXRgCiAgICAgICAgaG9vayBpcyBwcm92aWRlZCBmb3IgREJBUElzIHRoYXQgbmVlZCBzb21lIGV4dHJhIGNvbW1hbmRzIGVtaXR0ZWQKICAgICAgICBhZnRlciBhIGNvbW1pdCBpbiBvcmRlciB0byBlbnRlciB0aGUgbmV4dCB0cmFuc2FjdGlvbiwgd2hlbiB0aGUKICAgICAgICBTUUxBbGNoZW15IDpjbGFzczpgLkNvbm5lY3Rpb25gIGlzIHVzZWQgaW4gaXRzIGRlZmF1bHQgImF1dG9jb21taXQiCiAgICAgICAgbW9kZS4KCiAgICAgICAgOnBhcmFtIGRiYXBpX2Nvbm5lY3Rpb246IGEgREJBUEkgY29ubmVjdGlvbiwgdHlwaWNhbGx5CiAgICAgICAgIHByb3hpZWQgd2l0aGluIGEgOmNsYXNzOmAuQ29ubmVjdGlvbkZhaXJ5YC4KCiAgICAgICAgIE4pAXIGAAAAKQJyBwAAANoQZGJhcGlfY29ubmVjdGlvbnIJAAAAcgkAAAByCgAAANoIZG9fYmVnaW7xAQAAcwIAAAAAFXoQRGlhbGVjdC5kb19iZWdpbmMCAAAAAAAAAAIAAAABAAAAQwAAAHMKAAAAdACDAIIBZAFTACkCetpQcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIGBgY29ubmVjdGlvbi5yb2xsYmFjaygpYGAsIGdpdmVuCiAgICAgICAgYSBEQi1BUEkgY29ubmVjdGlvbi4KCiAgICAgICAgOnBhcmFtIGRiYXBpX2Nvbm5lY3Rpb246IGEgREJBUEkgY29ubmVjdGlvbiwgdHlwaWNhbGx5CiAgICAgICAgIHByb3hpZWQgd2l0aGluIGEgOmNsYXNzOmAuQ29ubmVjdGlvbkZhaXJ5YC4KCiAgICAgICAgIE4pAXIGAAAAKQJyBwAAAHIqAAAAcgkAAAByCQAAAHIKAAAA2gtkb19yb2xsYmFjawgCAABzAgAAAAAJehNEaWFsZWN0LmRvX3JvbGxiYWNrYwIAAAAAAAAAAgAAAAEAAABDAAAAcwoAAAB0AIMAggFkAVMAKQJ611Byb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgYGBjb25uZWN0aW9uLmNvbW1pdCgpYGAsIGdpdmVuIGEKICAgICAgICBEQi1BUEkgY29ubmVjdGlvbi4KCiAgICAgICAgOnBhcmFtIGRiYXBpX2Nvbm5lY3Rpb246IGEgREJBUEkgY29ubmVjdGlvbiwgdHlwaWNhbGx5CiAgICAgICAgIHByb3hpZWQg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bGxhYmxlIGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQgImNvbm4iIHdoaWNoIGlzIHRoZQogICAgICAgIERCQVBJIGNvbm5lY3Rpb24gaXRzZWxmLiAgSXQgaGFzIG5vIHJldHVybiB2YWx1ZS4KCiAgICAgICAgVGhpcyBpcyB1c2VkIHRvIHNldCBkaWFsZWN0LXdpZGUgcGVyLWNvbm5lY3Rpb24gb3B0aW9ucyBzdWNoIGFzCiAgICAgICAgaXNvbGF0aW9uIG1vZGVzLCB1bmljb2RlIG1vZGVzLCBldGMuCgogICAgICAgIElmIGEgY2FsbGFibGUgaXMgcmV0dXJuZWQsIGl0IHdpbGwgYmUgYXNzZW1ibGVkIGludG8gYSBwb29sIGxpc3RlbmVyCiAgICAgICAgdGhhdCByZWNlaXZlcyB0aGUgZGlyZWN0IERCQVBJIGNvbm5lY3Rpb24sIHdpdGggYWxsIHdyYXBwZXJzIHJlbW92ZWQuCgogICAgICAgIElmIE5vbmUgaXMgcmV0dXJuZWQsIG5vIGxpc3RlbmVyIHdpbGwgYmUgZ2VuZXJhdGVkLgoKICAgICAgICBOcgkAAAApAXIHAAAAcgkAAAByCQAAAHIKAAAA2gdjb25uZWN0qwIAAHMCAAAAAA96D0RpYWxlY3QuY29ubmVjdGMCAAAAAAAAAAIAAAABAAAAQwAAAHMKAAAAdACDAIIBZAFTACkCYe0CAABHaXZlbiBhIERCQVBJIGNvbm5lY3Rpb24sIHJldmVydCBpdHMgaXNvbGF0aW9uIHRvIHRoZSBkZWZhdWx0LgoKICAgICAgICBOb3RlIHRoYXQgdGhpcyBpcyBhIGRpYWxlY3QtbGV2ZWwgbWV0aG9kIHdoaWNoIGlzIHVzZWQgYXMgcGFydAogICAgICAgIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgOmNsYXNzOmAuQ29ubmVjdGlvbmAgYW5kCiAgICAgICAgOmNsYXNzOmAuRW5naW5lYAogICAgICAgIGlzb2xhdGlvbiBsZXZlbCBmYWNpbGl0aWVzOyB0aGVzZSBBUElzIHNob3VsZCBiZSBwcmVmZXJyZWQgZm9yCiAgICAgICAgbW9zdCB0eXBpY2FsIHVzZSBjYXNlcy4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgLkNvbm5lY3Rpb24uZ2V0X2lzb2xhdGlvbl9sZXZlbGAgLSB2aWV3IGN1cnJlbnQgbGV2ZWwKCiAgICAgICAgICAgIDphdHRyOmAuQ29ubmVjdGlvbi5kZWZhdWx0X2lzb2xhdGlvbl9sZXZlbGAgLSB2aWV3IGRlZmF1bHQgbGV2ZWwKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgLkNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnMuaXNvbGF0aW9uX2xldmVsYCAtCiAgICAgICAgICAgIHNldCBwZXIgOmNsYXNzOmAuQ29ubmVjdGlvbmAgaXNvbGF0aW9uIGxldmVsCgogICAgICAgICAgICA6cGFyYW1yZWY6YC5jcmVhdGVfZW5naW5lLmlzb2xhdGlvbl9sZXZlbGAgLQogICAgICAgICAgICBzZXQgcGVyIDpjbGFzczpgLkVuZ2luZWAgaXNvbGF0aW9uIGxldmVsCgogICAgICAgIE4pAXIGAAAAKQJyBwAAANoKZGJhcGlfY29ubnIJAAAAcgkAAAByCgAAANoVcmVzZXRfaXNvbGF0aW9uX2xldmVsvAIAAHMCAAAAABd6HURpYWxlY3QucmVzZXRfaXNvbGF0aW9uX2xldmVsYwMAAAAAAAAAAwAAAAEAAABDAAAAcwoAAAB0AIMAggFkAVMAKQJh4QIAAEdpdmVuIGEgREJBUEkgY29ubmVjdGlvbiwgc2V0IGl0cyBpc29sYXRpb24gbGV2ZWwuCgogICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIGEgZGlhbGVjdC1sZXZlbCBtZXRob2Qgd2hpY2ggaXMgdXNlZCBhcyBwYXJ0CiAgICAgICAgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSA6Y2xhc3M6YC5Db25uZWN0aW9uYCBhbmQKICAgICAgICA6Y2xhc3M6YC5FbmdpbmVgCiAgICAgICAgaXNvbGF0aW9uIGxldmVsIGZhY2lsaXRpZXM7IHRoZXNlIEFQSXMgc2hvdWxkIGJlIHByZWZlcnJlZCBmb3IKICAgICAgICBtb3N0IHR5cGljYWwgdXNlIGNhc2VzLgoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmAuQ29ubmVjdGlvbi5nZXRfaXNvbGF0aW9uX2xldmVsYCAtIHZpZXcgY3VycmVudCBsZXZlbAoKICAgICAgICAgICAgOmF0dHI6YC5Db25uZWN0aW9uLmRlZmF1bHRfaXNvbGF0aW9uX2xldmVsYCAtIHZpZXcgZGVmYXVsdCBsZXZlbAoKICAgICAgICAgICAgOnBhcmFtcmVmOmAuQ29ubmVjdGlvbi5leGVjdXRpb25fb3B0aW9ucy5pc29sYXRpb25fbGV2ZWxgIC0KICAgICAgICAgICAgc2V0IHBlciA6Y2xhc3M6YC5Db25uZWN0aW9uYCBpc29sYXRpb24gbGV2ZWwKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgLmNyZWF0ZV9lbmdpbmUuaXNvbGF0aW9uX2xldmVsYCAtCiAgICAgICAgICAgIHNldCBwZXIgOmNsYXNzOmAuRW5naW5lYCBpc29sYXRpb24gbGV2ZWwKCiAgICAgICAgTikBcgYAAAApA3IHAAAAckUAAADaBWxldmVscgkAAAByCQAAAHIKAAAA2hNzZXRfaXNvbGF0aW9uX2xldmVs1QIAAHMCAAAAABd6G0RpYWxlY3Quc2V0X2lzb2xhdGlvbl9sZXZlbGMCAAAAAAAAAAIAAAABAAAAQwAAAHMKAAAAdACDAIIBZAFTACkCYY4DAABHaXZlbiBhIERCQVBJIGNvbm5lY3Rpb24sIHJldHVybiBpdHMgaXNvbGF0aW9uIGxldmVsLgoKICAgICAgICBXaGVuIHdvcmtpbmcgd2l0aCBhIDpjbGFzczpgLkNvbm5lY3Rpb25gIG9iamVjdCwgdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgICBEQkFQSSBjb25uZWN0aW9uIG1heSBiZSBwcm9jdXJlZCB1c2luZyB0aGUKICAgICAgICA6YXR0cjpgLkNvbm5lY3Rpb24uY29ubmVjdGlvbmAgYWNjZXNzb3IuCgogICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIGEgZGlhbGVjdC1sZXZlbCBtZXRob2Qgd2hpY2ggaXMgdXNlZCBhcyBwYXJ0CiAgICAgICAgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSA6Y2xhc3M6YC5Db25uZWN0aW9uYCBhbmQKICAgICAgICA6Y2xhc3M6YC5FbmdpbmVgIGlzb2xhdGlvbiBsZXZlbCBmYWNpbGl0aWVzOwogICAgICAgIHRoZXNlIEFQSXMgc2hvdWxkIGJlIHByZWZlcnJlZCBmb3IgbW9zdCB0eXBpY2FsIHVzZSBjYXNlcy4KCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5Db25uZWN0aW9uLmdldF9pc29sYXRpb25fbGV2ZWxgIC0gdmlldyBjdXJyZW50IGxldmVsCgogICAgICAgICAgICA6YXR0cjpgLkNvbm5lY3Rpb24uZGVmYXVsdF9pc29sYXRpb25fbGV2ZWxgIC0gdmlldyBkZWZhdWx0IGxldmVsCgogICAgICAgICAgICA6cGFyYW1yZWY6YC5Db25uZWN0aW9uLmV4ZWN1dGlvbl9vcHRpb25zLmlzb2xhdGlvbl9sZXZlbGAgLQogICAgICAgICAgICBzZXQgcGVyIDpjbGFzczpgLkNvbm5lY3Rpb25gIGlzb2xhdGlvbiBsZXZlbAoKICAgICAgICAgICAgOnBhcmFtcmVmOmAuY3JlYXRlX2VuZ2luZS5pc29sYXRpb25fbGV2ZWxgIC0KICAgICAgICAgICAgc2V0IHBlciA6Y2xhc3M6YC5FbmdpbmVgIGlzb2xhdGlvbiBsZXZlbAoKCiAgICAgICAgTikBcgYAAAApAnIHAAAAckUAAAByCQAAAHIJAAAAcgoAAADaE2dldF9pc29sYXRpb25fbGV2ZWzuAgAAcwIAAAAAHHobRGlhbGVjdC5nZXRfaXNvbGF0aW9uX2xldmVsYwIAAAAAAAAAAgAAAAEAAABDAAAAcwQAAAB8AFMAKQFhngEAAEdpdmVuIGEgVVJMLCByZXR1cm4gdGhlIDpjbGFzczpgLkRpYWxlY3RgIHRoYXQgd2lsbCBiZSB1c2VkLgoKICAgICAgICBUaGlzIGlzIGEgaG9vayB0aGF0IGFsbG93cyBhbiBleHRlcm5hbCBwbHVnaW4gdG8gcHJvdmlkZSBmdW5jdGlvbmFsaXR5CiAgICAgICAgYXJvdW5kIGFuIGV4aXN0aW5nIGRpYWxlY3QsIGJ5IGFsbG93aW5nIHRoZSBwbHVnaW4gdG8gYmUgbG9hZGVkCiAgICAgICAgZnJvbSB0aGUgdXJsIGJhc2VkIG9uIGFuIGVudHJ5cG9pbnQsIGFuZCB0aGVuIHRoZSBwbHVnaW4gcmV0dXJucwogICAgICAgIHRoZSBhY3R1YWwgZGlhbGVjdCB0byBiZSB1c2VkLgoKICAgICAgICBCeSBkZWZhdWx0IHRoaXMganVzdCByZXR1cm5zIHRoZSBjbHMuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMC4zCgogICAgICAgIHIJAAAAKQJyDAAAAHIIAAAAcgkAAAByCQAAAHIKAAAA2g9nZXRfZGlhbGVjdF9jbHMMAwAAcwIAAAAADnoXRGlhbGVjdC5nZXRfZGlhbGVjdF9jbHNjAgAAAAAAAAACAAAAAQAAAEMAAABzBAAAAGQBUwApAmFxAgAAQSBjb252ZW5pZW5jZSBob29rIGNhbGxlZCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBmaW5hbCA6Y2xhc3M6YC5FbmdpbmVgLgoKICAgICAgICBJZiB0aGUgZGlhbGVjdCByZXR1cm5lZCBhIGRpZmZlcmVudCBjbGFzcyBmcm9tIHRoZQogICAgICAgIDptZXRoOmAuZ2V0X2RpYWxlY3RfY2xzYAogICAgICAgIG1ldGhvZCwgdGhlbiB0aGUgaG9vayBpcyBjYWxsZWQgb24gYm90aCBjbGFzc2VzLCBmaXJzdCBvbgogICAgICAgIHRoZSBkaWFsZWN0IGNsYXNzIHJldHVybmVkIGJ5IHRoZSA6bWV0aDpgLmdldF9kaWFsZWN0X2Nsc2AgbWV0aG9kIGFuZAogICAgICAgIHRoZW4gb24gdGhlIGNsYXNzIG9uIHdoaWNoIHRoZSBtZXRob2Qgd2FzIGNhbGxlZC4KCiAgICAgICAgVGhlIGhvb2sgc2hvdWxkIGJlIHVzZWQgYnkgZGlhbGVjdHMgYW5kL29yIHdyYXBwZXJzIHRvIGFwcGx5IHNwZWNpYWwKICAgICAgICBldmVudHMgdG8gdGhlIGVuZ2luZSBvciBpdHMgY29tcG9uZW50cy4gICBJbiBwYXJ0aWN1bGFyLCBpdCBhbGxvd3MKICAgICAgICBhIGRpYWxlY3Qtd3JhcHBpbmcgY2xhc3MgdG8gYXBwbHkgZGlhbGVjdC1sZXZlbCBldmVudHMuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMC4zCgogICAgICAgIE5yCQAAACkCcgwAAADaBmVuZ2luZXIJAAAAcgkAAAByCgAAANoOZW5naW5lX2NyZWF0ZWQcAwAAcwIAAAAAEXoWRGlhbGVjdC5lbmdpbmVfY3JlYXRlZCkBTikBTikBTikBTikBTikBTikBTikBTikBTikBTikBTikBTikBTikBTikBTikCVEYpAlRGKQFOKQFOKQFOKTbaCF9fbmFtZV9f2gpfX21vZHVsZV9f2gxfX3F1YWxuYW1lX1/aB19fZG9jX19aC19oYXNfZXZlbnRzcgsAAADaC2NsYXNzbWV0aG9kcg4AAAByEAAAAHISAAAAchYAAAByAgAAANoKZGVwcmVjYXRlZHIXAAAAchgAAAByGQAAAHIaAAAAchsAAAByHAAAAHIdAAAAch4AAAByHwAAAHIgAAAAciEAAAByIgAAAHIkAAAAciUAAAByJgAAAHInAAAAcigAAAByKQAAAHIrAAAAciwAAAByLQAAAHIuAAAAci8AAAByMAAAAHIxAAAAcjIAAAByNAAAAHI1AAAAcjgAAAByOQAAAHI6AAAAcj8AAAByQAAAAHJBAAAAckMAAAByRAAAAHJGAAAAckgAAABySQAAAHJKAAAAckwAAAByCQAAAHIJAAAAcgkAAAByCgAAAHIFAAAADwAAAHNoAAAACH8ACgQCBAIICwwPCBEIFgohBAECAQQEDAcKEQoaCgUKCAoJCggKCgoUChcKFgoSCAoICgoLCgoICwgMCBcICwgLCAwICggKCAoICQgKCAsKDwoPCAoKBgoHCgoIBggRCBkIGQgeDBByBQAAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHMwAAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBGQFhABaBWQGZAeEAFoGZAhkCYQAWgdkClMAKQvaEkNyZWF0ZUVuZ2luZVBsdWdpbmF3DQAAQSBzZXQgb2YgaG9va3MgaW50ZW5kZWQgdG8gYXVnbWVudCB0aGUgY29uc3RydWN0aW9uIG9mIGFuCiAgICA6Y2xhc3M6YC5FbmdpbmVgIG9iamVjdCBiYXNlZCBvbiBlbnRyeXBvaW50IG5hbWVzIGluIGEgVVJMLgoKICAgIFRoZSBwdXJwb3NlIG9mIDpjbGFzczpgLkNyZWF0ZUVuZ2luZVBsdWdpbmAgaXMgdG8gYWxsb3cgdGhpcmQtcGFydHkKICAgIHN5c3RlbXMgdG8gYXBwbHkgZW5naW5lLCBwb29sIGFuZCBkaWFsZWN0IGxldmVsIGV2ZW50IGxpc3RlbmVycyB3aXRob3V0CiAgICB0aGUgbmVlZCBmb3IgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiB0byBiZSBtb2RpZmllZDsgaW5zdGVhZCwgdGhlIHBsdWdpbgogICAgbmFtZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBkYXRhYmFzZSBVUkwuICBUYXJnZXQgYXBwbGljYXRpb25zIGZvcgogICAgOmNsYXNzOmAuQ3JlYXRlRW5naW5lUGx1Z2luYCBpbmNsdWRlOgoKICAgICogY29ubmVjdGlvbiBhbmQgU1FMIHBlcmZvcm1hbmNlIHRvb2xzLCBlLmcuIHdoaWNoIHVzZSBldmVudHMgdG8gdHJhY2sKICAgICAgbnVtYmVyIG9mIGNoZWNrb3V0cyBhbmQvb3IgdGltZSBzcGVudCB3aXRoIHN0YXRlbWVudHMKCiAgICAqIGNvbm5lY3Rpdml0eSBwbHVnaW5zIHN1Y2ggYXMgcHJveGllcwoKICAgIFBsdWdpbnMgYXJlIHJlZ2lzdGVyZWQgdXNpbmcgZW50cnkgcG9pbnRzIGluIGEgc2ltaWxhciB3YXkgYXMgdGhhdAogICAgb2YgZGlhbGVjdHM6OgoKICAgICAgICBlbnRyeV9wb2ludHM9ewogICAgICAgICAgICAnc3FsYWxjaGVteS5wbHVnaW5zJzogWwogICAgICAgICAgICAgICAgJ215cGx1Z2luID0gbXlhcHAucGx1Z2luczpNeVBsdWdpbicKICAgICAgICAgICAgXQoKICAgIEEgcGx1Z2luIHRoYXQgdXNlcyB0aGUgYWJvdmUgbmFtZXMgd291bGQgYmUgaW52b2tlZCBmcm9tIGEgZGF0YWJhc2UKICAgIFVSTCBhcyBpbjo6CgogICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgY3JlYXRlX2VuZ2luZQoKICAgICAgICBlbmdpbmUgPSBjcmVhdGVfZW5naW5lKAogICAgICAgICAgIm15c3FsK3B5bXlzcWw6Ly9zY290dDp0aWdlckBsb2NhbGhvc3QvdGVzdD9wbHVnaW49bXlwbHVnaW4iKQoKICAgIEFsdGVybmF0aXZlbHksIHRoZSA6cGFyYW1yZWY6YC5jcmVhdGVfZW5naW5lLnBsdWdpbnMiIGFyZ3VtZW50IG1heSBiZQogICAgcGFzc2VkIGFzIGEgbGlzdCB0byA6ZnVuYzpgLmNyZWF0ZV9lbmdpbmVgOjoKCiAgICAgICAgZW5naW5lID0gY3JlYXRlX2VuZ2luZSgKICAgICAgICAgICJteXNxbCtweW15c3FsOi8vc2NvdHQ6dGlnZXJAbG9jYWxob3N0L3Rlc3QiLAogICAgICAgICAgcGx1Z2lucz1bIm15cGx1Z2luIl0pCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS4yLjMgIHBsdWdpbiBuYW1lcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQKICAgICAgIHRvIDpmdW5jOmAuY3JlYXRlX2VuZ2luZWAgYXMgYSBsaXN0CgogICAgVGhlIGBgcGx1Z2luYGAgYXJndW1lbnQgc3VwcG9ydHMgbXVsdGlwbGUgaW5zdGFuY2VzLCBzbyB0aGF0IGEgVVJMCiAgICBtYXkgc3BlY2lmeSBtdWx0aXBsZSBwbHVnaW5zOyB0aGV5IGFyZSBsb2FkZWQgaW4gdGhlIG9yZGVyIHN0YXRlZAogICAgaW4gdGhlIFVSTDo6CgogICAgICAgIGVuZ2luZSA9IGNyZWF0ZV9lbmdpbmUoCiAgICAgICAgICAibXlzcWwrcHlteXNxbDovL3Njb3R0OnRpZ2VyQGxvY2FsaG9zdC8iCiAgICAgICAgICAidGVzdD9wbHVnaW49cGx1Z2luX29uZSZwbHVnaW49cGx1Z2luX3R3cCZwbHVnaW49cGx1Z2luX3RocmVlIikKCiAgICBBIHBsdWdpbiBjYW4gcmVjZWl2ZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBmcm9tIHRoZSBVUkwgc3RyaW5nIGFzCiAgICB3ZWxsIGFzIGZyb20gdGhlIGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byA6ZnVuYzpgLmNyZWF0ZV9lbmdpbmVgLgogICAgVGhlIDpjbGFzczpgLlVSTGAgb2JqZWN0IGFuZCB0aGUga2V5d29yZCBkaWN0aW9uYXJ5IGFyZSBwYXNzZWQgdG8gdGhlCiAgICBjb25zdHJ1Y3RvciBzbyB0aGF0IHRoZXNlIGFyZ3VtZW50cyBjYW4gYmUgZXh0cmFjdGVkIGZyb20gdGhlIHVybCdzCiAgICA6YXR0cjpgLlVSTC5xdWVyeWAgY29sbGVjdGlvbiBhcyB3ZWxsIGFzIGZyb20gdGhlIGRpY3Rpb25hcnk6OgoKICAgICAgICBjbGFzcyBNeVBsdWdpbihDcmVhdGVFbmdpbmVQbHVnaW4pOgogICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBrd2FyZ3MpOgogICAgICAgICAgICAgICAgc2VsZi5teV9hcmd1bWVudF9vbmUgPSB1cmwucXVlcnkucG9wKCdteV9hcmd1bWVudF9vbmUnKQogICAgICAgICAgICAgICAgc2VsZi5teV9hcmd1bWVudF90d28gPSB1cmwucXVlcnkucG9wKCdteV9hcmd1bWVudF90d28nKQogICAgICAgICAgICAgICAgc2VsZi5teV9hcmd1bWVudF90aHJlZSA9IGt3YXJncy5wb3AoJ215X2FyZ3VtZW50X3RocmVlJywgTm9uZSkKCiAgICBBcmd1bWVudHMgbGlrZSB0aG9zZSBpbGx1c3RyYXRlZCBhYm92ZSB3b3VsZCBiZSBjb25zdW1lZCBmcm9tIHRoZQogICAgZm9sbG93aW5nOjoKCiAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBjcmVhdGVfZW5naW5lCgogICAgICAgIGVuZ2luZSA9IGNyZWF0ZV9lbmdpbmUoCiAgICAgICAgICAibXlzcWwrcHlteXNxbDovL3Njb3R0OnRpZ2VyQGxvY2FsaG9zdC8iCiAgICAgICAgICAidGVzdD9wbHVnaW49bXlwbHVnaW4mbXlfYXJndW1lbnRfb25lPWZvbyZteV9hcmd1bWVudF90d289YmFyIiwKICAgICAgICAgIG15X2FyZ3VtZW50X3RocmVlPSdiYXQnKQoKICAgIFRoZSBVUkwgYW5kIGRpY3Rpb25hcnkgYXJlIHVzZWQgZm9yIHN1YnNlcXVlbnQgc2V0dXAgb2YgdGhlIGVuZ2luZQogICAgYXMgdGhleSBhcmUsIHNvIHRoZSBwbHVnaW4gY2FuIG1vZGlmeSB0aGVpciBhcmd1bWVudHMgaW4tcGxhY2UuCiAgICBBcmd1bWVudHMgdGhhdCBhcmUgb25seSB1bmRlcnN0b29kIGJ5IHRoZSBwbHVnaW4gc2hvdWxkIGJlIHBvcHBlZAogICAgb3Igb3RoZXJ3aXNlIHJlbW92ZWQgc28gdGhhdCB0aGV5IGFyZW4ndCBpbnRlcnByZXRlZCBhcyBlcnJvbmVvdXMKICAgIGFyZ3VtZW50cyBhZnRlcndhcmRzLgoKICAgIFdoZW4gdGhlIGVuZ2luZSBjcmVhdGlvbiBwcm9jZXNzIGNvbXBsZXRlcyBhbmQgcHJvZHVjZXMgdGhlCiAgICA6Y2xhc3M6YC5FbmdpbmVgIG9iamVjdCwgaXQgaXMgYWdhaW4gcGFzc2VkIHRvIHRoZSBwbHVnaW4gdmlhIHRoZQogICAgOm1ldGg6YC5DcmVhdGVFbmdpbmVQbHVnaW4uZW5naW5lX2NyZWF0ZWRgIGhvb2suICBJbiB0aGlzIGhvb2ssIGFkZGl0aW9uYWwKICAgIGNoYW5nZXMgY2FuIGJlIG1hZGUgdG8gdGhlIGVuZ2luZSwgbW9zdCB0eXBpY2FsbHkgaW52b2x2aW5nIHNldHVwIG9mCiAgICBldmVudHMgKGUuZy4gdGhvc2UgZGVmaW5lZCBpbiA6cmVmOmBjb3JlX2V2ZW50X3RvcGxldmVsYCkuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xCgogICAgYwMAAAAAAAAAAwAAAAIAAABDAAAAcwoAAAB8AXwAXwBkAVMAKQJhUwMAAENvbnN0cnVjdCBhIG5ldyA6Y2xhc3M6YC5DcmVhdGVFbmdpbmVQbHVnaW5gLgoKICAgICAgICBUaGUgcGx1Z2luIG9iamVjdCBpcyBpbnN0YW50aWF0ZWQgaW5kaXZpZHVhbGx5IGZvciBlYWNoIGNhbGwKICAgICAgICB0byA6ZnVuYzpgLmNyZWF0ZV9lbmdpbmVgLiAgQSBzaW5nbGUgOmNsYXNzOmAuRW5naW5lYCB3aWxsIGJlCiAgICAgICAgcGFzc2VkIHRvIHRoZSA6bWV0aDpgLkNyZWF0ZUVuZ2luZVBsdWdpbi5lbmdpbmVfY3JlYXRlZGAgbWV0aG9kCiAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGlzIFVSTC4KCiAgICAgICAgOnBhcmFtIHVybDogdGhlIDpjbGFzczpgLlVSTGAgb2JqZWN0LiAgVGhlIHBsdWdpbiBzaG91bGQgaW5zcGVjdAogICAgICAgICB3aGF0IGl0IG5lZWRzIGhlcmUgYXMgd2VsbCBhcyByZW1vdmUgaXRzIGN1c3RvbSBhcmd1bWVudHMgZnJvbSB0aGUKICAgICAgICAgOmF0dHI6YC5VUkwucXVlcnlgIGNvbGxlY3Rpb24uICBUaGUgVVJMIGNhbiBiZSBtb2RpZmllZCBpbi1wbGFjZQogICAgICAgICBpbiBhbnkgb3RoZXIgd2F5IGFzIHdlbGwuCiAgICAgICAgOnBhcmFtIGt3YXJnczogVGhlIGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byA6ZnVuY2AuY3JlYXRlX2VuZ2luZWAuCiAgICAgICAgIFRoZSBwbHVnaW4gY2FuIHJlYWQgYW5kIG1vZGlmeSB0aGlzIGRpY3Rpb25hcnkgaW4tcGxhY2UsIHRvIGFmZmVjdAogICAgICAgICB0aGUgdWx0aW1hdGUgYXJndW1lbnRzIHVzZWQgdG8gY3JlYXRlIHRoZSBlbmdpbmUuICBJdCBzaG91bGQKICAgICAgICAgcmVtb3ZlIGl0cyBjdXN0b20gYXJndW1lbnRzIGZyb20gdGhlIGRpY3Rpb25hcnkgYXMgd2VsbC4KCiAgICAgICAgTikBcggAAAApA3IHAAAAcggAAADaBmt3YXJnc3IJAAAAcgkAAAByCgAAANoIX19pbml0X1+HAwAAcwIAAAAAEnobQ3JlYXRlRW5naW5lUGx1Z2luLl9faW5pdF9fYwMAAAAAAAAAAwAAAAEAAABDAAAAcwQAAABkAVMAKQJ6H3BhcnNlIGFuZCBtb2RpZnkgZGlhbGVjdCBrd2FyZ3NOcgkAAAApA3IHAAAAWgtkaWFsZWN0X2Nsc1oMZGlhbGVjdF9hcmdzcgkAAAByCQAAAHIKAAAA2hVoYW5kbGVfZGlhbGVjdF9rd2FyZ3ObAwAAcwIAAAAAAXooQ3JlYXRlRW5naW5lUGx1Z2luLmhhbmRsZV9kaWFsZWN0X2t3YXJnc2MDAAAAAAAAAAMAAAABAAAAQwAAAHMEAAAAZAFTACkCehxwYXJzZSBhbmQgbW9kaWZ5IHBvb2wga3dhcmdzTnIJAAAAKQNyBwAAAFoIcG9vbF9jbHNaCXBvb2xfYXJnc3IJAAAAcgkAAAByCgAAANoSaGFuZGxlX3Bvb2xfa3dhcmdzngMAAHMCAAAAAAF6JUNyZWF0ZUVuZ2luZVBsdWdpbi5oYW5kbGVfcG9vbF9rd2FyZ3NjAgAAAAAAAAACAAAAAQAAAEMAAABzBAAAAGQBUwApAnrIUmVjZWl2ZSB0aGUgOmNsYXNzOmAuRW5naW5lYCBvYmplY3Qgd2hlbiBpdCBpcyBmdWxseSBjb25zdHJ1Y3RlZC4KCiAgICAgICAgVGhlIHBsdWdpbiBtYXkgbWFrZSBhZGRpdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGVuZ2luZSwgc3VjaCBhcwogICAgICAgIHJlZ2lzdGVyaW5nIGVuZ2luZSBvciBjb25uZWN0aW9uIHBvb2wgZXZlbnRzLgoKICAgICAgICBOcgkAAAApAnIHAAAAcksAAAByCQAAAHIJAAAAcgoAAAByTAAAAKEDAABzAgAAAAAGeiFDcmVhdGVFbmdpbmVQbHVnaW4uZW5naW5lX2NyZWF0ZWROKQhyTQAAAHJOAAAAck8AAAByUAAAAHJVAAAAclYAAAByVwAAAHJMAAAAcgkAAAByCQAAAHIJAAAAcgoAAAByUwAAADADAABzCgAAAAhVBAIIFAgDCANyUwAAAGMAAAAAAAAAAAAAAAACAAAAQAAAAHNYAAAAZQBaAWQAWgJkAVoDZAJaBGQCWgVkA2QEhABaBmQFZAaEAFoHZAdkCIQAWghkCWQKhABaCWQLZAyEAFoKZA1kDoQAWgtkD2QQhABaDGQRZBKEAFoNZAJTACkT2hBFeGVjdXRpb25Db250ZXh0YUEHAABBIG1lc3NlbmdlciBvYmplY3QgZm9yIGEgRGlhbGVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgc2luZ2xlCiAgICBleGVjdXRpb24uCgogICAgRXhlY3V0aW9uQ29udGV4dCBzaG91bGQgaGF2ZSB0aGVzZSBkYXRhIG1lbWJlcnM6CgogICAgY29ubmVjdGlvbgogICAgICBDb25uZWN0aW9uIG9iamVjdCB3aGljaCBjYW4gYmUgZnJlZWx5IHVzZWQgYnkgZGVmYXVsdCB2YWx1ZQogICAgICBnZW5lcmF0b3JzIHRvIGV4ZWN1dGUgU1FMLiAgVGhpcyBDb25uZWN0aW9uIHNob3VsZCByZWZlcmVuY2UgdGhlCiAgICAgIHNhbWUgdW5kZXJseWluZyBjb25uZWN0aW9uL3RyYW5zYWN0aW9uYWwgcmVzb3VyY2VzIG9mCiAgICAgIHJvb3RfY29ubmVjdGlvbi4KCiAgICByb290X2Nvbm5lY3Rpb24KICAgICAgQ29ubmVjdGlvbiBvYmplY3Qgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiB0aGlzIEV4ZWN1dGlvbkNvbnRleHQuICBUaGlzCiAgICAgIENvbm5lY3Rpb24gbWF5IGhhdmUgY2xvc2Vfd2l0aF9yZXN1bHQ9VHJ1ZSBzZXQsIGluIHdoaWNoIGNhc2UgaXQgY2FuCiAgICAgIG9ubHkgYmUgdXNlZCBvbmNlLgoKICAgIGRpYWxlY3QKICAgICAgZGlhbGVjdCB3aGljaCBjcmVhdGVkIHRoaXMgRXhlY3V0aW9uQ29udGV4dC4KCiAgICBjdXJzb3IKICAgICAgREItQVBJIGN1cnNvciBwcm9jdXJlZCBmcm9tIHRoZSBjb25uZWN0aW9uLAoKICAgIGNvbXBpbGVkCiAgICAgIGlmIHBhc3NlZCB0byBjb25zdHJ1Y3Rvciwgc3FsYWxjaGVteS5lbmdpbmUuYmFzZS5Db21waWxlZCBvYmplY3QKICAgICAgYmVpbmcgZXhlY3V0ZWQsCgogICAgc3RhdGVtZW50CiAgICAgIHN0cmluZyB2ZXJzaW9uIG9mIHRoZSBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWQuICBJcyBlaXRoZXIKICAgICAgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvciwgb3IgbXVzdCBiZSBjcmVhdGVkIGZyb20gdGhlCiAgICAgIHNxbC5Db21waWxlZCBvYmplY3QgYnkgdGhlIHRpbWUgcHJlX2V4ZWMoKSBoYXMgY29tcGxldGVkLgoKICAgIHBhcmFtZXRlcnMKICAgICAgYmluZCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgZXhlY3V0ZSgpIG1ldGhvZC4gIEZvciBjb21waWxlZAogICAgICBzdGF0ZW1lbnRzLCB0aGlzIGlzIGEgZGljdGlvbmFyeSBvciBsaXN0IG9mIGRpY3Rpb25hcmllcy4gIEZvcgogICAgICB0ZXh0dWFsIHN0YXRlbWVudHMsIGl0IHNob3VsZCBiZSBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgdGhlCiAgICAgIGRpYWxlY3QncyBwYXJhbXN0eWxlIChpLmUuIGRpY3Qgb3IgbGlzdCBvZiBkaWN0cyBmb3Igbm9uCiAgICAgIHBvc2l0aW9uYWwsIGxpc3Qgb3IgbGlzdCBvZiBsaXN0cy90dXBsZXMgZm9yIHBvc2l0aW9uYWwpLgoKICAgIGlzaW5zZXJ0CiAgICAgIFRydWUgaWYgdGhlIHN0YXRlbWVudCBpcyBhbiBJTlNFUlQuCgogICAgaXN1cGRhdGUKICAgICAgVHJ1ZSBpZiB0aGUgc3RhdGVtZW50IGlzIGFuIFVQREFURS4KCiAgICBzaG91bGRfYXV0b2NvbW1pdAogICAgICBUcnVlIGlmIHRoZSBzdGF0ZW1lbnQgaXMgYSAiY29tbWl0dGFibGUiIHN0YXRlbWVudC4KCiAgICBwcmVmZXRjaF9jb2xzCiAgICAgIGEgbGlzdCBvZiBDb2x1bW4gb2JqZWN0cyBmb3Igd2hpY2ggYSBjbGllbnQtc2lkZSBkZWZhdWx0CiAgICAgIHdhcyBmaXJlZCBvZmYuICBBcHBsaWVzIHRvIGluc2VydHMgYW5kIHVwZGF0ZXMuCgogICAgcG9zdGZldGNoX2NvbHMKICAgICAgYSBsaXN0IG9mIENvbHVtbiBvYmplY3RzIGZvciB3aGljaCBhIHNlcnZlci1zaWRlIGRlZmF1bHQgb3IKICAgICAgaW5saW5lIFNRTCBleHByZXNzaW9uIHZhbHVlIHdhcyBmaXJlZCBvZmYuICBBcHBsaWVzIHRvIGluc2VydHMKICAgICAgYW5kIHVwZGF0ZXMuCiAgICBOYwEAAAAAAAAAAQAAAAEAAABDAAAAcwoAAAB0AIMAggFkAVMAKQJ69VJldHVybiBhIG5ldyBjdXJzb3IgZ2VuZXJhdGVkIGZyb20gdGhpcyBFeGVjdXRpb25Db250ZXh0J3MKICAgICAgICBjb25uZWN0aW9uLgoKICAgICAgICBTb21lIGRpYWxlY3RzIG1heSB3aXNoIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKICAgICAgICBjb25uZWN0aW9uLmN1cnNvcigpLCBzdWNoIGFzIHBvc3RncmVzcWwgd2hpY2ggbWF5IHJldHVybiBhIFBHCiAgICAgICAgInNlcnZlciBzaWRlIiBjdXJzb3IuCiAgICAgICAgTikBcgYAAAApAXIHAAAAcgkAAAByCQAAAHIKAAAA2g1jcmVhdGVfY3Vyc29yBgQAAHMCAAAAAAl6HkV4ZWN1dGlvbkNvbnRleHQuY3JlYXRlX2N1cnNvcmMBAAAAAAAAAAEAAAABAAAAQwAAAHMKAAAAdACDAIIBZAFTACkCevVDYWxsZWQgYmVmb3JlIGFuIGV4ZWN1dGlvbiBvZiBhIGNvbXBpbGVkIHN0YXRlbWVudC4KCiAgICAgICAgSWYgYSBjb21waWxlZCBzdGF0ZW1lbnQgd2FzIHBhc3NlZCB0byB0aGlzIEV4ZWN1dGlvbkNvbnRleHQsCiAgICAgICAgdGhlIGBzdGF0ZW1lbnRgIGFuZCBgcGFyYW1ldGVyc2AgZGF0YW1lbWJlcnMgbXVzdCBiZQogICAgICAgIGluaXRpYWxpemVkIGFmdGVyIHRoaXMgc3RhdGVtZW50IGlzIGNvbXBsZXRlLgogICAgICAgIE4pAXIGAAAAKQFyBwAAAHIJAAAAcgkAAAByCgAAANoIcHJlX2V4ZWMRBAAAcwIAAAAACHoZRXhlY3V0aW9uQ29udGV4dC5wcmVfZXhlY2MBAAAAAAAAAAEAAAABAAAAQwAAAHMKAAAAdACDAIIBZAFTACkCYQMBAABDYWxsZWQgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBhIGNvbXBpbGVkIHN0YXRlbWVudC4KCiAgICAgICAgSWYgYSBjb21waWxlZCBzdGF0ZW1lbnQgd2FzIHBhc3NlZCB0byB0aGlzIEV4ZWN1dGlvbkNvbnRleHQsCiAgICAgICAgdGhlIGBsYXN0X2luc2VydF9pZHNgLCBgbGFzdF9pbnNlcnRlZF9wYXJhbXNgLCBldGMuCiAgICAgICAgZGF0YW1lbWJlcnMgc2hvdWxkIGJlIGF2YWlsYWJsZSBhZnRlciB0aGlzIG1ldGhvZCBj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IGFuZCA6Y2xhc3M6YC5FbmdpbmVgLgoKICAgIENvbm5lY3RhYmxlIG11c3QgYWxzbyBpbXBsZW1lbnQgdGhlICdkaWFsZWN0JyBtZW1iZXIgd2hpY2ggcmVmZXJlbmNlcyBhCiAgICA6Y2xhc3M6YC5EaWFsZWN0YCBpbnN0YW5jZS4KCiAgICBjAQAAAAAAAAACAAAAAQAAAEsAAABzBAAAAGQBUwApAmEWAQAAUmV0dXJuIGEgOmNsYXNzOmAuQ29ubmVjdGlvbmAgb2JqZWN0LgoKICAgICAgICBEZXBlbmRpbmcgb24gY29udGV4dCwgdGhpcyBtYXkgYmUgYGBzZWxmYGAgaWYgdGhpcyBvYmplY3QKICAgICAgICBpcyBhbHJlYWR5IGFuIGluc3RhbmNlIG9mIDpjbGFzczpgLkNvbm5lY3Rpb25gLCBvciBhIG5ld2x5CiAgICAgICAgcHJvY3VyZWQgOmNsYXNzOmAuQ29ubmVjdGlvbmAgaWYgdGhpcyBvYmplY3QgaXMgYW4gaW5zdGFuY2UKICAgICAgICBvZiA6Y2xhc3M6YC5FbmdpbmVgLgoKICAgICAgICBOcgkAAAApAnIHAAAAclQAAAByCQAAAHIJAAAAcgoAAAByRAAAAFYEAABzAgAAAAAIehNDb25uZWN0YWJsZS5jb25uZWN0TnoDMS4zYSUBAABUaGUgOm1ldGg6YC5FbmdpbmUuY29udGV4dHVhbF9jb25uZWN0YCBhbmQgOm1ldGg6YC5Db25uZWN0aW9uLmNvbnRleHR1YWxfY29ubmVjdGAgbWV0aG9kcyBhcmUgZGVwcmVjYXRlZC4gIFRoaXMgbWV0aG9kIGlzIGFuIGFydGlmYWN0IG9mIHRoZSB0aHJlYWRsb2NhbCBlbmdpbmUgc3RyYXRlZ3kgd2hpY2ggaXMgYWxzbyB0byBiZSBkZXByZWNhdGVkLiAgIEZvciBleHBsaWNpdCBjb25uZWN0aW9ucyBmcm9tIGFuIDpjbGFzczpgLkVuZ2luZWAsIHVzZSB0aGUgOm1ldGg6YC5FbmdpbmUuY29ubmVjdGAgbWV0aG9kLmMBAAAAAAAAAAMAAAADAAAATwAAAHMMAAAAfABqAHwBfAKOAVMAKQFhRgEAAFJldHVybiBhIDpjbGFzczpgLkNvbm5lY3Rpb25gIG9iamVjdCB3aGljaCBtYXkgYmUgcGFydCBvZiBhbiBvbmdvaW5nCiAgICAgICAgY29udGV4dC4KCiAgICAgICAgRGVwZW5kaW5nIG9uIGNvbnRleHQsIHRoaXMgbWF5IGJlIGBgc2VsZmBgIGlmIHRoaXMgb2JqZWN0CiAgICAgICAgaXMgYWxyZWFkeSBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YC5Db25uZWN0aW9uYCwgb3IgYSBuZXdseQogICAgICAgIHByb2N1cmVkIDpjbGFzczpgLkNvbm5lY3Rpb25gIGlmIHRoaXMgb2JqZWN0IGlzIGFuIGluc3RhbmNlCiAgICAgICAgb2YgOmNsYXNzOmAuRW5naW5lYC4KCiAgICAgICAgKQHaE19jb250ZXh0dWFsX2Nvbm5lY3QpA3IHAAAA2gNhcmdyFQAAAHIJAAAAcgkAAAByCgAAANoSY29udGV4dHVhbF9jb25uZWN0ZwQAAHMCAAAAABN6HkNvbm5lY3RhYmxlLmNvbnRleHR1YWxfY29ubmVjdGMBAAAAAAAAAAEAAAABAAAAQwAAAHMKAAAAdACDAIIBZABTACkBTikBcgYAAAApAXIHAAAAcgkAAAByCQAAAHIKAAAAcmMAAAB8BAAAcwIAAAAAAXofQ29ubmVjdGFibGUuX2NvbnRleHR1YWxfY29ubmVjdHoDMC43YQ4BAABUaGUgOm1ldGg6YC5Db25uZWN0YWJsZS5jcmVhdGVgIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gIFBsZWFzZSB1c2UgdGhlIGBgLmNyZWF0ZSgpYGAgbWV0aG9kIG9uIHNwZWNpZmljIHNjaGVtYSBvYmplY3RzIHRvIGVtaXQgRERMIHNlcXVlbmNlcywgaW5jbHVkaW5nIDptZXRoOmAuVGFibGUuY3JlYXRlYCwgOm1ldGg6YC5JbmRleC5jcmVhdGVgLCBhbmQgOm1ldGg6YC5NZXRhRGF0YS5jcmVhdGVfYWxsYC5jAgAAAAAAAAADAAAAAQAAAEsAAABzCgAAAHQAgwCCAWQBUwApAno8RW1pdCBDUkVBVEUgc3RhdGVtZW50cyBmb3IgdGhlIGdpdmVuIHNjaGVtYSBlbnRp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
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
base.cpython-37.pyc
67.31 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
default.cpython-37.pyc
35.73 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
interfaces.cpython-37.pyc
40.83 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
reflection.cpython-37.pyc
25.44 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
result.cpython-37.pyc
42.96 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
strategies.cpython-37.pyc
8.48 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
threadlocal.cpython-37.pyc
4.90 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
url.cpython-37.pyc
8.43 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
util.cpython-37.pyc
1.69 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
21.08 KB
lrw-r--r--
2023-11-14 14:32:36
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).