REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 171.80 KB
Close
/opt/cloudlinux/venv/lib64/python3.11/site-packages/sqlalchemy/sql/__pycache__/selectable.cpython-311.pyc
Text
Base64
pw0NCgAAAAC7fG9pjSECAOMAAAAAAAAAAAAAAAAIAAAAAAAAAPNsBAAAlwBkAFoAZAFkAmwBWgFkAWQCbAJaAmQBZAJsA1oDZAFkA2wDbQRaBAEAZAFkBGwFbQZaBgEAZAVkBmwHbQhaCAEAZAVkB2wHbQlaCQEAZAVkCGwKbQtaCwEAZAVkCWwMbQ1aDQEAZAVkCmwMbQ5aDgEAZAVkC2wMbQ9aDwEAZAVkDGwMbRBaEAEAZAVkDWwMbRFaEQEAZAVkDmwMbRJaEgEAZAVkD2wMbRNaEwEAZAVkEGwUbRVaFQEAZAVkEWwUbRZaFgEAZAVkEmwUbRdaFwEAZAVkE2wUbRhaGAEAZAVkFGwUbRlaGQEAZAVkFWwUbRpaGgEAZAVkFmwUbRtaGwEAZAVkF2wUbRxaHAEAZAVkGGwUbR1aHQEAZAVkGWwUbR5aHgEAZAVkGmwUbR9aHwEAZAVkG2wUbSBaIAEAZAVkHGwUbSFaIQEAZAVkHWwUbSJaIgEAZAVkHmwUbSNaIwEAZAVkH2wUbSRaJAEAZAVkIGwUbSVaJQEAZAVkIWwUbSZaJgEAZAVkImwUbSdaJwEAZAVkI2wUbShaKAEAZAVkJGwUbSlaKQEAZCVkJmwHbSpaKgEAZCVkJ2wHbStaKwEAZCVkKGwHbSxaLAEAZCmEAFotZCqEAFouAgBHAGQrhABkLGUjpgMAAKsDAAAAAAAAAABaL2RaZC2EAVowZC6EAFoxZC+EAFoyAgBHAGQwhABkMWUkpgMAAKsDAAAAAAAAAABaMwIARwBkMoQAZDNlNKYDAACrAwAAAAAAAAAAWjUCAEcAZDSEAGQ1ZTSmAwAAqwMAAAAAAAAAAFo2AgBHAGQ2hABkN2UzpgMAAKsDAAAAAAAAAABaNwIARwBkOIQAZDllN6YDAACrAwAAAAAAAAAAWjgCAEcAZDqEAGQ7ZTemAwAAqwMAAAAAAAAAAFo5AgBHAGQ8hABkPWU5pgMAAKsDAAAAAAAAAABaOgIARwBkPoQAZD9lOaYDAACrAwAAAAAAAAAAWjsCAEcAZECEAGRBZRJlNWU2ZTmmBgAAqwYAAAAAAAAAAFo8AgBHAGRChABkQ2U0pgMAAKsDAAAAAAAAAABaPQIARwBkRIQAZEVlN6YDAACrAwAAAAAAAAAAWj4CAEcAZEaEAGRHZRNlN6YEAACrBAAAAAAAAAAAWj8CAEcAZEiEAGRJZSSmAwAAqwMAAAAAAAAAAFpAAgBHAGRKhABkS2U9ZRFlN6YFAACrBQAAAAAAAAAAWkECAEcAZEyEAGRNZUGmAwAAqwMAAAAAAAAAAFpCAgBHAGROhABkT2VCpgMAAKsDAAAAAAAAAABaQwIARwBkUIQAZFFlNWU2ZUKmBQAAqwUAAAAAAAAAAFpEAgBHAGRShABkU2USZSamBAAAqwQAAAAAAAAAAFpFAgBHAGRUhABkVWUppgMAAKsDAAAAAAAAAABaRgIARwBkVoQAZFdlQaYDAACrAwAAAAAAAAAAWkcCAEcAZFiEAGRZZQumAwAAqwMAAAAAAAAAAFpIZAJTAClbenRUaGUgOmNsYXNzOmBfZXhwcmVzc2lvbi5Gcm9tQ2xhdXNlYCBjbGFzcyBvZiBTUUwgZXhwcmVzc2lvbiBlbGVtZW50cywKcmVwcmVzZW50aW5nClNRTCB0YWJsZXMgYW5kIGRlcml2ZWQgcm93c2V0cy4KCukAAAAATikB2gphdHRyZ2V0dGVyKQHaCVZpc2l0YWJsZekBAAAAKQHaCW9wZXJhdG9ycykB2gh0eXBlX2FwaSkB2glBbm5vdGF0ZWQpAdoNX2Zyb21fb2JqZWN0cykB2gtfZ2VuZXJhdGl2ZSkB2hBDb2x1bW5Db2xsZWN0aW9uKQHaCUNvbHVtblNldCkB2gpFeGVjdXRhYmxlKQHaCkdlbmVyYXRpdmUpAdoJSW1tdXRhYmxlKQHaEF9hbm9ueW1vdXNfbGFiZWwpAdoXX2NsYXVzZV9lbGVtZW50X2FzX2V4cHIpAdoGX2Nsb25lKQHaEl9jbG9uZWRfZGlmZmVyZW5jZakB2hRfY2xvbmVkX2ludGVyc2VjdGlvbikB2hdfZG9jdW1lbnRfdGV4dF9jb2VyY2lvbikB2g5fZXhwYW5kX2Nsb25lZKkB2hxfaW50ZXJwcmV0X2FzX2NvbHVtbl9vcl9mcm9tKQHaJl9saXRlcmFsX2FuZF9sYWJlbHNfYXNfbGFiZWxfcmVmZXJlbmNlqQHaG19saXRlcmFsX2FzX2xhYmVsX3JlZmVyZW5jZakB2hBfbGl0ZXJhbF9hc190ZXh0KQHaEV9ub190ZXh0X2NvZXJjaW9uKQHaEV9zZWxlY3RfaXRlcmFibGVzKQHaBGFuZF8p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AAAAAAB8AqYBAACrAQAAAAAAAAAAegYAAKYBAACrAQAAAAAAAAAAggF8AKAEAAAAAAAAAAAAAAAAAAAAAAAAAAB8AXwDpgIAAKsCAAAAAAAAAAABAGQCUwApBWG7AwAAQWRkIG9uZSBvciBtb3JlIGV4cHJlc3Npb25zIGZvbGxvd2luZyB0aGUgc3RhdGVtZW50IGtleXdvcmQsIGkuZS4KICAgICAgICBTRUxFQ1QsIElOU0VSVCwgVVBEQVRFLCBvciBERUxFVEUuIEdlbmVyYXRpdmUuCgogICAgICAgIFRoaXMgaXMgdXNlZCB0byBzdXBwb3J0IGJhY2tlbmQtc3BlY2lmaWMgcHJlZml4IGtleXdvcmRzIHN1Y2ggYXMgdGhvc2UKICAgICAgICBwcm92aWRlZCBieSBNeVNRTC4KCiAgICAgICAgRS5nLjo6CgogICAgICAgICAgICBzdG10ID0gdGFibGUuaW5zZXJ0KCkucHJlZml4X3dpdGgoIkxPV19QUklPUklUWSIsIGRpYWxlY3Q9Im15c3FsIikKCiAgICAgICAgICAgICMgTXlTUUwgNS43IG9wdGltaXplciBoaW50cwogICAgICAgICAgICBzdG10ID0gc2VsZWN0KFt0YWJsZV0pLnByZWZpeF93aXRoKAogICAgICAgICAgICAgICAgIi8qKyBCS0EodDEpICovIiwgZGlhbGVjdD0ibXlzcWwiKQoKICAgICAgICBNdWx0aXBsZSBwcmVmaXhlcyBjYW4gYmUgc3BlY2lmaWVkIGJ5IG11bHRpcGxlIGNhbGxzCiAgICAgICAgdG8gOm1ldGg6YF9leHByZXNzaW9uLkhhc1ByZWZpeGVzLnByZWZpeF93aXRoYC4KCiAgICAgICAgOnBhcmFtIFwqZXhwcjogdGV4dHVhbCBvciA6Y2xhc3M6YF9leHByZXNzaW9uLkNsYXVzZUVsZW1lbnRgCiAgICAgICAgIGNvbnN0cnVjdCB3aGljaAogICAgICAgICB3aWxsIGJlIHJlbmRlcmVkIGZvbGxvd2luZyB0aGUgSU5TRVJULCBVUERBVEUsIG9yIERFTEVURQogICAgICAgICBrZXl3b3JkLgogICAgICAgIDpwYXJhbSBcKiprdzogQSBzaW5nbGUga2V5d29yZCAnZGlh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qwAAAAAAAAAAAFoiZRBkG4QApgAAAKsAAAAAAAAAAABaI2UQZByEAKYAAACrAAAAAAAAAAAAWiQCAGUfAgBlJWQdpgEAAKsBAAAAAAAAAABkHqwfpgIAAKsCAAAAAAAAAABaJgIAZR8CAGUlZB2mAQAAqwEAAAAAAAAAAKYBAACrAQAAAAAAAAAAWidkIIQAWihlH2QhhACmAAAAqwAAAAAAAAAAAFopZCKEAFoqZCOEAForZARTACkp2gpGcm9tQ2xhdXNlYUUDAABSZXByZXNlbnQgYW4gZWxlbWVudCB0aGF0IGNhbiBiZSB1c2VkIHdpdGhpbiB0aGUgYGBGUk9NYGAKICAgIGNsYXVzZSBvZiBhIGBgU0VMRUNUYGAgc3RhdGVtZW50LgoKICAgIFRoZSBtb3N0IGNvbW1vbiBmb3JtcyBvZiA6Y2xhc3M6YF9leHByZXNzaW9uLkZyb21DbGF1c2VgIGFyZSB0aGUKICAgIDpjbGFzczpgX3NjaGVtYS5UYWJsZWAgYW5kIHRoZSA6ZnVuYzpgX2V4cHJlc3Npb24uc2VsZWN0YCBjb25zdHJ1Y3RzLiAgS2V5CiAgICBmZWF0dXJlcyBjb21tb24gdG8gYWxsIDpjbGFzczpgX2V4cHJlc3Npb24uRnJvbUNsYXVzZWAgb2JqZWN0cyBpbmNsdWRlOgoKICAgICogYSA6YXR0cjpgLmNgIGNvbGxlY3Rpb24sIHdoaWNoIHByb3ZpZGVzIHBlci1uYW1lIGFjY2VzcyB0byBhIGNvbGxlY3Rpb24KICAgICAgb2YgOmNsYXNzOmBfZXhwcmVzc2lvbi5Db2x1bW5FbGVtZW50YCBvYmplY3RzLgogICAgKiBhIDphdHRyOmAucHJpbWFyeV9rZXlgIGF0dHJpYnV0ZSwgd2hpY2ggaXMgYSBjb2xsZWN0aW9uIG9mIGFsbCB0aG9zZQogICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkNvbHVtbkVsZW1lbnRgCiAgICAgIG9iamVjdHMgdGhhdCBpbmRpY2F0ZSB0aGUgYGBwcmltYXJ5X2tleWBgIGZsYWcuCiAgICAqIE1ldGhvZHMgdG8gZ2VuZXJhdGUgdmFyaW91cyBkZXJpdmF0aW9ucyBvZiBhICJmcm9tIiBjbGF1c2UsIGluY2x1ZGlu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ICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkZyb21DbGF1c2VgIHRvIGFub3RoZXIKICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkZyb21DbGF1c2VgLgoKICAgICAgICBFLmcuOjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgam9pbgoKICAgICAgICAgICAgaiA9IHVzZXJfdGFibGUuam9pbihhZGRyZXNzX3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl90YWJsZS5jLmlkID09IGFkZHJlc3NfdGFibGUuYy51c2VyX2lkKQogICAgICAgICAgICBzdG10ID0gc2VsZWN0KFt1c2VyX3RhYmxlXSkuc2VsZWN0X2Zyb20oaikKCiAgICAgICAgd291bGQgZW1pdCBTUUwgYWxvbmcgdGhlIGxpbmVzIG9mOjoKCiAgICAgICAgICAgIFNFTEVDVCB1c2VyLmlkLCB1c2VyLm5hbWUgRlJPTSB1c2VyCiAgICAgICAgICAgIEpPSU4gYWRkcmVzcyBPTiB1c2VyLmlkID0gYWRkcmVzcy51c2VyX2lkCgogICAgICAgIDpwYXJhbSByaWdodDogdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGpvaW47IHRoaXMgaXMgYW55CiAgICAgICAgIDpjbGFzczpgX2V4cHJlc3Npb24uRnJvbUNsYXVzZWAgb2JqZWN0IHN1Y2ggYXMgYQogICAgICAgICA6Y2xhc3M6YF9zY2hlbWEuVGFibGVgIG9iamVjdCwgYW5kCiAgICAgICAgIG1heSBhbHNvIGJlIGEgc2VsZWN0YWJsZS1jb21wYXRpYmxlIG9iamVjdCBzdWNoIGFzIGFuIE9STS1tYXBwZWQKICAgICAgICAgY2xhc3MuCgogICAgICAgIDpwYXJhbSBvbmNsYXVzZTogYSBTUUwgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIE9OIGNsYXVzZSBvZiB0aGUKICAgICAgICAgam9pbi4gIElmIGxlZnQgYXQgYGBOb25lYGAsIDptZXRoOmBfZXhwcmVzc2lvbi5Gcm9tQ2xhdXNlLmpvaW5gCiAgICAgICAgIHdpbGwgYXR0ZW1wdCB0bwogICAgICAgICBqb2luIHRoZSB0d28gdGFibGVzIGJhc2VkIG9uIGEgZm9yZWlnbiBrZXkgcmVsYXRpb25zaGlwLgoKICAgICAgICA6cGFyYW0gaXNvdXRlcjogaWYgVHJ1ZSwgcmVuZGVyIGEgTEVGVCBPVVRFUiBKT0lOLCBpbnN0ZWFkIG9mIEpPSU4uCgogICAgICAgIDpwYXJhbSBmdWxsOiBpZiBUcnVlLCByZW5kZXIgYSBGVUxMIE9VVEVSIEpPSU4sIGluc3RlYWQgb2YgTEVGVCBPVVRFUgogICAgICAgICBKT0lOLiAgSW1wbGllcyA6cGFyYW1yZWY6YC5Gcm9tQ2xhdXNlLmpvaW4uaXNvdXRlcmAuCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEKCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6ZnVuYzpgX2V4cHJlc3Npb24uam9pbmAgLSBzdGFuZGFsb25lIGZ1bmN0aW9uCgogICAgICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkpvaW5gIC0gdGhlIHR5cGUgb2Ygb2JqZWN0IHByb2R1Y2VkCgogICAgICAgIKkB2gRKb2luKQVySwAAANoFcmlnaHTaCG9uY2xhdXNl2gdpc291dGVy2gRmdWxscwUAAAAgICAgIHI7AAAAcnQAAAB6D0Zyb21DbGF1c2Uuam9pblUBAABzGwAAAIAA9VgBABAUkESYJaAYqDewRNEPOdQPOdAIOXJFAAAAYwQAAAAAAAAAAAAAAAcAAAADAAAA8ygAAACXAHQBAAAAAAAAAAAAAHwAfAF8AmQBfAOmBQAAqwUAAAAAAAAAAFMAKQJhCwUAAFJldHVybiBhIDpjbGFzczpgX2V4cHJlc3Npb24uSm9pbmAgZnJvbSB0aGlzCiAgICAgICAgOmNsYXNzOmBfZXhwcmVzc2lvbi5Gcm9tQ2xhdXNlYAogICAgICAgIHRvIGFub3RoZXIgOmNsYXNzOmBGcm9tQ2xhdXNlYCwgd2l0aCB0aGUgImlzb3V0ZXIiIGZsYWcgc2V0IHRvCiAgICAgICAgVHJ1ZS4KCiAgICAgICAgRS5nLjo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IG91dGVyam9pbgoKICAgICAgICAgICAgaiA9IHVzZXJfdGFibGUub3V0ZXJqb2luKGFkZHJlc3NfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3RhYmxlLmMuaWQgPT0gYWRkcmVzc190YWJsZS5jLnVzZXJfaWQpCgogICAgICAgIFRoZSBhYm92ZSBpcyBlcXVpdmFsZW50IHRvOjoKCiAgICAgICAgICAgIGogPSB1c2VyX3RhYmxlLmpvaW4oCiAgICAgICAgICAgICAgICBhZGRyZXNzX3RhYmxlLAogICAgICAgICAgICAgICAgdXNlcl90YWJsZS5jLmlkID09IGFkZHJlc3NfdGFibGUuYy51c2VyX2lkLAogICAgICAgICAgICAgICAgaXNvdXRlcj1UcnVlKQoKICAgICAgICA6cGFyYW0gcmlnaHQ6IHRoZSByaWdodCBzaWRlIG9mIHRoZSBqb2luOyB0aGlzIGlzIGFueQogICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkZyb21DbGF1c2VgIG9iamVjdCBzdWNoIGFzIGEKICAgICAgICAgOmNsYXNzOmBfc2NoZW1hLlRhYmxlYCBvYmplY3QsIGFuZAogICAgICAgICBtYXkgYWxzbyBiZSBhIHNlbGVjdGFibGUtY29tcGF0aWJsZSBvYmplY3Qgc3VjaCBhcyBhbiBPUk0tbWFwcGVkCiAgICAgICAgIGNsYXNzLgoKICAgICAgICA6cGFyYW0gb25jbGF1c2U6IGEgU1FMIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBPTiBjbGF1c2Ugb2YgdGhlCiAgICAgICAgIGpvaW4uICBJZiBsZWZ0IGF0IGBgTm9uZWBgLCA6bWV0aDpgX2V4cHJlc3Npb24uRnJvbUNsYXVzZS5qb2luYAogICAgICAgICB3aWxsIGF0dGVtcHQgdG8KICAgICAgICAgam9pbiB0aGUgdHdvIHRhYmxlcyBiYXNlZCBvbiBhIGZvcmVpZ24ga2V5IHJlbGF0aW9uc2hpcC4KCiAgICAgICAgOnBhcmFtIGZ1bGw6IGlmIFRydWUsIHJlbmRlciBhIEZVTEwgT1VURVIgSk9JTiwgaW5zdGVhZCBvZgogICAgICAgICBMRUZU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AACrAgAAAAAAAAAAfQx8DHwLawAAAAAAcgR8CHwKfQV9BIz/fARTACkGYVgDAABHaXZlbiBhIDpjbGFzczpgX2V4cHJlc3Npb24uQ29sdW1uRWxlbWVudGAsIHJldHVybiB0aGUgZXhwb3J0ZWQKICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkNvbHVtbkVsZW1lbnRgIG9iamVjdCBmcm9tIHRoaXMKICAgICAgICA6Y2xhc3M6YGV4cHJlc3Npb24uU2VsZWN0YWJsZWAKICAgICAgICB3aGljaCBjb3JyZXNwb25kcyB0byB0aGF0IG9yaWdpbmFsCiAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29sdW1uYCB2aWEgYSBjb21tb24gYW5jZXN0b3IKICAgICAgICBjb2x1bW4uCgogICAgICAgIDpwYXJhbSBjb2x1bW46IHRoZSB0YXJnZXQgOmNsYXNzOmBfZXhwcmVzc2lvbi5Db2x1bW5FbGVtZW50YAogICAgICAgICAgICAgICAgICAgICAgdG8gYmUgbWF0Y2hlZAoKICAgICAgICA6cGFyYW0gcmVxdWlyZV9lbWJlZGRlZDogb25seSByZXR1cm4gY29ycmVzcG9uZGluZyBjb2x1bW5zIGZvcgogICAgICAgICB0aGUgZ2l2ZW4gOmNsYXNzOmBfZXhwcmVzc2lvbi5Db2x1bW5FbGVtZW50YCwgaWYgdGhlIGdpdmVuCiAgICAgICAgIDpjbGFzczpgX2V4cHJlc3Npb24uQ29sdW1uRWxlbWVudGAKICAgICAgICAgaXMgYWN0dWFsbHkgcHJlc2VudCB3aXRoaW4gYSBzdWItZWxlbWVudAogICAgICAgICBvZiB0aGlzIDpjbGFzczpgX2V4cHJlc3Npb24uRnJvbUNsYXVzZWAuCiAgICAgICAgIE5vcm1hbGx5IHRoZSBjb2x1bW4gd2lsbCBtYXRjaCBpZgogICAgICAgICBpdCBtZXJlbHkgc2hhcmVzIGEgY29tbW9uIGFuY2VzdG9yIHdpdGggb25lIG9mIHRoZSBleHBvcnRlZAogICAgICAgICBjb2x1bW5zIG9mIHRoaXMgOmNsYXNzOmBfZXhwcmVzc2lvbi5Gcm9tQ2xhdXNlYC4KCiAgICAg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c24ndCBwb3B1bGF0ZWQgaXRzIC5jLiBjb2xsZWN0aW9uIHlldCwKICAgICAgICBpdCBzaG91bGQgYXQgbGVhc3QgcGFzcyBvbiB0aGUgbWVzc2FnZSB0byB0aGUgY29udGFpbmVkIHNlbGVjdGFibGVzLAogICAgICAgIGJ1dCBpdCB3aWxsIHJldHVybiBOb25lLgoKICAgICAgICBUaGlzIG1ldGhvZCBpcyBjdXJyZW50bHkgdXNlZCBieSBEZWNsYXJhdGl2ZSB0byBhbGxvdyBUYWJsZQogICAgICAgIGNvbHVtbnMgdG8gYmUgYWRkZWQgdG8gYSBwYXJ0aWFsbHkgY29uc3RydWN0ZWQgaW5oZXJpdGFuY2UKICAgICAgICBtYXBwaW5nIHRoYXQgbWF5IGhhdmUgYWxyZWFkeSBwcm9kdWNlZCBqb2lucy4gIFRoZSBtZXRob2QKICAgICAgICBpc24ndCBwdWJsaWMgcmlnaHQgbm93LCBhcyB0aGUgZnVsbCBzcGFuIG9mIGltcGxpY2F0aW9ucwogICAgICAgIGFuZC9vciBjYXZlYXRzIGFyZW4ndCB5ZXQgY2xlYXIuCgogICAgICAgIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0IHRoaXMgZnVuY3Rpb25hbGl0eSBjb3VsZCBiZSBpbnZva2VkIGJ5CiAgICAgICAgZGVmYXVsdCB2aWEgYW4gZXZlbnQsIHdoaWNoIHdvdWxkIHJlcXVpcmUgdGhhdAogICAgICAgIHNlbGVjdGFibGVzIG1haW50YWluIGEgd2VhayByZWZlcmVuY2luZyBjb2xsZWN0aW9uIG9mIGFsbAogICAgICAgIGRlcml2YXRpb25zLgoKICAgICAgICBOKQNyDQEAANoDa2V5cp8AAACpAnJLAAAActMAAABzAgAAACAgcjsAAADaF19yZWZyZXNoX2Zvcl9uZXdfY29sdW1ueiJGcm9tQ2xhdXNlLl9yZWZyZXNoX2Zvcl9uZXdfY29sdW1uuQIAAHNAAAAAgADwMgAQFNQPI/AABQkY2BMXkDTYDROMWpg0nDzQDSfQDSeoRKxMuBa8GtQsRMgG0CxO0CxO2BMZiE3gExeQNHJFAAAAcj4AAACpA05GRqkCTkZy4AAAAKkBRiksck0AAAByTgAAAHJPAAAA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ICAgICAgIG9yCiAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLkZyb21DbGF1c2Uub3V0ZXJqb2luYCBtZXRob2RzIG9uIHRoZSByZXN1bHRpbmcKICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkpvaW5gIG9iamVjdC4KCiAgICAgICAgVKkCcq8AAABysAAAAHJRAAAAKQXaA2Nsc3IkAQAAcq0AAAByrgAAAHKwAAAAcwUAAAAgICAgIHI7AAAA2hFfY3JlYXRlX291dGVyam9pbnoWSm9pbi5fY3JlYXRlX291dGVyam9pbgQDAABzHwAAAIAA8DAAEBOIc5A0mBWgCLAkuFTQD0LRD0LUD0LQCEJyRQAAAGMGAAAAAAAAAAAAAAAHAAAAAwAAAPMgAAAAlwACAHwAfAF8AnwDfAR8BaYFAACrBQAAAAAAAAAAUwApAWE4BgAAUHJvZHVjZSBhIDpjbGFzczpgX2V4cHJlc3Npb24uSm9pbmAgb2JqZWN0LCBnaXZlbiB0d28KICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkZyb21DbGF1c2VgCiAgICAgICAgZXhwcmVzc2lvbnMuCgogICAgICAgIEUuZy46OgoKICAgICAgICAgICAgaiA9IGpvaW4odXNlcl90YWJsZSwgYWRkcmVzc190YWJsZSwKICAgICAgICAgICAgICAgICAgICAgdXNlcl90YWJsZS5jLmlkID09IGFkZHJlc3NfdGFibGUuYy51c2VyX2lkKQogICAgICAgICAgICBzdG10ID0gc2VsZWN0KFt1c2VyX3RhYmxlXSkuc2VsZWN0X2Zyb20oaikKCiAgICAgICAgd291bGQgZW1pdCBTUUwgYWxvbmcgdGhlIGxpbmVzIG9mOjoKCiAgICAgICAgICAgIFNFTEVDVCB1c2VyLmlkLCB1c2VyLm5hbWUgRlJPTSB1c2VyCiAgICAgICAgICAgIEpPSU4gYWRkcmVzcyBPTiB1c2VyLmlkID0gYWRkcmVzcy51c2VyX2lkCgogICAgICAgIFNpbWlsYXIgZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUgZ2l2ZW4gYW55CiAgICAgICAgOmNsYXNzOmBfZXhwcmVzc2lvbi5Gcm9tQ2xhdXNlYCBvYmplY3QgKGUuZy4gc3VjaCBhcyBhCiAgICAgICAgOmNsYXNzOmBfc2NoZW1hLlRhYmxlYCkgdXNpbmcKICAgICAgICB0aGUgOm1ldGg6YF9leHByZXNzaW9uLkZyb21DbGF1c2Uuam9pbmAgbWV0aG9kLgoKICAgICAgICA6cGFyYW0gbGVmdDogVGhlIGxlZnQgc2lkZSBvZiB0aGUgam9pbi4KCiAgICAgICAgOnBhcmFtIHJpZ2h0OiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgam9pbjsgdGhpcyBpcyBhbnkKICAgICAgICAgOmNsYXNzOmBfZXhwcmVzc2lvbi5Gcm9tQ2xhdXNlYCBvYmplY3Qgc3VjaCBhcyBhCiAgICAgICAgIDpjbGFzczpgX3NjaGVtYS5UYWJsZWAgb2JqZWN0LCBhbmQKICAgICAgICAgbWF5IGFsc28gYmUgYSBzZWxlY3RhYmxlLWNvbXBhdGlibGUgb2JqZWN0IHN1Y2ggYXMgYW4gT1JNLW1hcHBlZAogICAgICAgICBjbGFzcy4KCiAgICAgICAgOnBhcmFtIG9uY2xhdXNlOiBhIFNRTCBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgT04gY2xhdXNlIG9mIHRoZQogICAgICAgICBqb2luLiAgSWYgbGVmdCBhdCBgYE5vbmVgYCwgOm1ldGg6YF9leHByZXNzaW9uLkZyb21DbGF1c2Uuam9pbmAKICAgICAgICAgd2lsbCBhdHRlbXB0IHRvCiAgICAgICAgIGpvaW4gdGhlIHR3byB0YWJsZXMgYmFzZWQgb24gYSBmb3JlaWduIGtleSByZWxhdGlvbnNoaXAuCgogICAgICAgIDpwYXJhbSBpc291dGVyOiBpZiBUcnVlLCByZW5kZXIgYSBMRUZUIE9VVEVSIEpPSU4sIGluc3RlYWQgb2YgSk9JTi4KCiAgICAgICAgOnBhcmFtIGZ1bGw6IGlmIFRydWUsIHJlbmRlciBhIEZVTEwgT1VURVIgSk9JTiwgaW5zdGVhZCBvZiBKT0lOLgoKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLkZyb21DbGF1c2Uu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ZV9hCiAgICAgICAgICAgICAgICBKT0lOIHRhYmxlX2IgT04gdGFibGVfYS5pZCA9IHRhYmxlX2IuYV9pZCkgQVMgYW5vbl8xCgogICAgICAgIFRoZSBlcXVpdmFsZW50IGxvbmctaGFuZCBmb3JtLCBnaXZlbiBhIDpjbGFzczpgX2V4cHJlc3Npb24uSm9pbmAKICAgICAgICBvYmplY3QKICAgICAgICBgYGpgYCwgaXM6OgoKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBzZWxlY3QsIGFsaWFzCiAgICAgICAgICAgIGogPSBhbGlhcygKICAgICAgICAgICAgICAgIHNlbGVjdChbai5sZWZ0LCBqLnJpZ2h0XSkuXAogICAgICAgICAgICAgICAgICAgIHNlbGVjdF9mcm9tKGopLlwKICAgICAgICAgICAgICAgICAgICB3aXRoX2xhYmVscyhUcnVlKS5cCiAgICAgICAgICAgICAgICAgICAgY29ycmVsYXRlKEZhbHNlKSwKICAgICAgICAgICAgICAgIG5hbWU9bmFtZQogICAgICAgICAgICApCgogICAgICAgIFRoZSBzZWxlY3RhYmxlIHByb2R1Y2VkIGJ5IDptZXRoOmBfZXhwcmVzc2lvbi5Kb2luLmFsaWFzYAogICAgICAgIGZlYXR1cmVzIHRoZSBzYW1lCiAgICAgICAgY29sdW1ucyBhcyB0aGF0IG9mIHRoZSB0d28gaW5kaXZpZHVhbCBzZWxlY3RhYmxlcyBwcmVzZW50ZWQgdW5kZXIKICAgICAgICBhIHNpbmdsZSBuYW1lIC0gdGhlIGluZGl2aWR1YWwgY29sdW1ucyBhcmUgImF1dG8tbGFiZWxlZCIsIG1lYW5pbmcKICAgICAgICB0aGUgYGAuYy5gYCBjb2xsZWN0aW9uIG9mIHRoZSByZXN1bHRpbmcgOmNsYXNzOmBfZXhwcmVzc2lvbi5BbGlhc2AKICAgICAgICByZXByZXNlbnRzCiAgICAgICAgdGhlIG5hbWVzIG9mIHRoZSBpbmRpdmlkdWFsIGNvbHVtbnMgdXNpbmcgYQogICAgICAgIGBgPHRhYmxlbmFtZT5fPGNvbHVtbmFtZT5gYCBzY2hlbWU6OgoKICAgICAgICAgICAgai5jLnRhYmxlX2FfaWQKICAgICAgICAgICAgai5jLnRhYmxlX2JfYV9pZAoKICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uSm9pbi5hbGlhc2AgYWxzbyBmZWF0dXJlcyBhbiBhbHRlcm5hdGUKICAgICAgICBvcHRpb24gZm9yIGFsaWFzaW5nIGpvaW5zIHdoaWNoIHByb2R1Y2VzIG5vIGVuY2xvc2luZyBTRUxFQ1QgYW5kCiAgICAgICAgZG9lcyBub3Qgbm9ybWFsbHkgYXBwbHkgbGFiZWxzIHRvIHRoZSBjb2x1bW4gbmFtZXMuICBUaGUKICAgICAgICBgYGZsYXQ9VHJ1ZWBgIG9wdGlvbiB3aWxsIGNhbGwgOm1ldGg6YF9leHByZXNzaW9uLkZyb21DbGF1c2UuYWxpYXNgCiAgICAgICAgYWdhaW5zdCB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZXMgaW5kaXZpZHVhbGx5LgogICAgICAgIFVzaW5nIHRoaXMgb3B0aW9uLCBubyBuZXcgYGBTRUxFQ1RgYCBpcyBwcm9kdWNlZDsKICAgICAgICB3ZSBpbnN0ZWFkLCBmcm9tIGEgY29uc3RydWN0IGFzIGJlbG93OjoKCiAgICAgICAgICAgIGogPSB0YWJsZV9hLmpvaW4odGFibGVfYiwgdGFibGVfYS5jLmlkID09IHRhYmxlX2IuYy5hX2lkKQogICAgICAgICAgICBqID0gai5hbGlhcyhmbGF0PVRydWUpCgogICAgICAgIHdlIGdldCBhIHJlc3VsdCBsaWtlIHRoaXM6OgoKICAgICAgICAgICAgdGFibGVfYSBBUyB0YWJsZV9hXzEgSk9JTiB0YWJsZV9iIEFTIHRhYmxlX2JfMSBPTgogICAgICAgICAgICB0YWJsZV9hXzEuaWQgPSB0YWJsZV9iXzEuYV9pZAoKICAgICAgICBUaGUgYGBmbGF0PVRydWVgYCBhcmd1bWVudCBpcyBhbHNvIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbnRhaW5lZAogICAgICAgIHNlbGVjdGFibGVzLCBzbyB0aGF0IGEgY29tcG9zaXRlIGpvaW4gc3VjaCBhczo6CgogICAgICAgICAgICBqID0gdGFibGVfYS5qb2luKAogICAgICAgICAgICAgICAgICAgIHRhYmxlX2Iuam9pbih0YWJsZV9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfYi5jLmlkID09IHRhYmxlX2MuYy5iX2lkKSwKICAgICAgICAgICAgICAgICAgICB0YWJsZV9iLmMuYV9pZCA9PSB0YWJsZV9hLmMuaWQKICAgICAgICAgICAgICAgICkuYWxpYXMoZmxhdD1UcnVlKQoKICAgICAgICBXaWxsIHByb2R1Y2UgYW4gZXhwcmVzc2lvbiBsaWtlOjoKCiAgICAgICAgICAgIHRhYmxlX2EgQVMgdGFibGVfYV8xIEpPSU4gKAogICAgICAgICAgICAgICAgICAgIHRhYmxlX2IgQVMgdGFibGVfYl8xIEpPSU4gdGFibGVfYyBBUyB0YWJsZV9jXzEKICAgICAgICAgICAgICAgICAgICBPTiB0YWJsZV9iXzEuaWQgPSB0YWJsZV9jXzEuYl9pZAogICAgICAgICAgICApIE9OIHRhYmxlX2FfMS5pZCA9IHRhYmxlX2JfMS5hX2lkCgogICAgICAgIFRoZSBzdGFuZGFsb25lIDpmdW5jOmBfZXhwcmVzc2lvbi5hbGlhc2AgZnVuY3Rpb24gYXMgd2VsbCBhcyB0aGUKICAgICAgICBiYXNlIDptZXRoOmBfZXhwcmVzc2lvbi5Gcm9tQ2xhdXNlLmFsaWFzYAogICAgICAgIG1ldGhvZCBhbHNvIHN1cHBvcnQgdGhlIGBgZmxhdD1UcnVlYGAKICAgICAgICBhcmd1bWVudCBhcyBhIG5vLW9wLCBzbyB0aGF0IHRoZSBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIHRvIHRoZQogICAgICAgIGBgYWxpYXMoKWBgIG1ldGhvZCBvZiBhbnkgc2VsZWN0YWJsZS4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMC45LjAgQWRkZWQgdGhlIGBgZmxhdD1UcnVlYGAgb3B0aW9uIHRvIGNyZWF0ZQogICAgICAgICAgImFsaWFzZXMiIG9mIGpvaW5zIHdpdGhvdXQgZW5jbG9zaW5nIGluc2lkZSBvZiBhIFNFTEVDVAogICAgICAgICAgc3VicXVlcnkuCgogICAgICAgIDpwYXJhbSBuYW1l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cHJlc3Npb24uRnJvbUNsYXVzZS5hbGlhc2AKICAgICAgICBtZXRob2QgYXZhaWxhYmxlIG9uIGFsbCA6Y2xhc3M6YF9leHByZXNzaW9uLkZyb21DbGF1c2VgIHN1YmNsYXNzZXMuCiAgICAgICAgSW4gdGVybXMgb2YKICAgICAgICBhIFNFTEVDVCBvYmplY3QgYXMgZ2VuZXJhdGVkIGZyb20gdGhlIDpmdW5jOmBfZXhwcmVzc2lvbi5zZWxlY3RgCiAgICAgICAgZnVuY3Rpb24sIHRoZSA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0QmFzZS5hbGlhc2AgbWV0aG9kIHJldHVybnMgYW4KICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkFsaWFzYCBvciBzaW1pbGFyIG9iamVjdCB3aGljaCByZXByZXNlbnRzIGEgbmFtZWQsCiAgICAgICAgcGFyZW50aGVzaXplZCBzdWJxdWVyeS4KCiAgICAgICAgV2hlbiBhbiA6Y2xhc3M6YF9leHByZXNzaW9uLkFsaWFzYCBpcyBjcmVhdGVkIGZyb20gYQogICAgICAgIDpjbGFzczpgX3NjaGVtYS5UYWJsZWAgb2JqZWN0LAogICAgICAgIHRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgdGhlIHRhYmxlIGJlaW5nIHJlbmRlcmVkCiAgICAgICAgYXMgYGB0YWJsZW5hbWUgQVMgYWxpYXNuYW1lYGAgaW4gYSBTRUxFQ1Qgc3RhdGVtZW50LgoKICAgICAgICBGb3IgOmZ1bmM6YF9leHByZXNzaW9uLnNlbGVjdGAgb2JqZWN0cywgdGhlIGVmZmVjdCBpcyB0aGF0IG9mCiAgICAgICAgY3JlYXRpbmcgYSBuYW1lZCBzdWJxdWVyeSwgaS5lLiBgYChzZWxlY3QgLi4uKSBBUyBhbGlhc25hbWVgYC4KCiAgICAgICAgVGhlIGBgbmFtZWBgIHBhcmFtZXRlciBpcyBvcHRpb25hbCwgYW5kIHByb3ZpZGVzIHRoZSBuYW1lCiAgICAgICAgdG8gdXNlIGluIHRoZSByZW5kZXJlZCBTUUwuICBJZiBibGFuaywgYW4gImFub255bW91cyIgbmFtZQogICAgICAgIHdpbGwgYmUgZGV0ZXJtaW5pc3RpY2FsbHkgZ2VuZXJhdGVkIGF0IGNvbXBpbGUgdGltZS4KICAgICAgICBEZXRlcm1pbmlzdGljIG1lYW5zIHRoZSBuYW1lIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGFnYWluc3QKICAgICAgICBvdGhlciBjb25zdHJ1Y3RzIHVzZWQgaW4gdGhlIHNhbWUgc3RhdGVtZW50LCBhbmQgd2lsbCBhbHNvIGJlIHRoZQogICAgICAgIHNhbWUgbmFtZSBmb3IgZWFjaCBzdWNjZXNzaXZlIGNvbXBpbGF0aW9uIG9mIHRoZSBzYW1lIHN0YXRlbWVudAogICAgICAgIG9iamVjdC4KCiAgICAgICAgOnBhcmFtIHNlbGVjdGFibGU6IGFueSA6Y2xhc3M6YF9leHByZXNzaW9uLkZyb21DbGF1c2VgIHN1YmNsYXNzLAogICAgICAgICAgICBzdWNoIGFzIGEgdGFibGUsIHNlbGVjdCBzdGF0ZW1lbnQsIGV0Yy4KCiAgICAgICAgOnBhcmFtIG5hbWU6IHN0cmluZyBuYW1lIHRvIGJlIGFzc2lnbmVkIGFzIHRoZSBhbGlhcy4KICAgICAgICAgICAgSWYgYGBOb25lYGAsIGEgbmFtZSB3aWxsIGJlIGRldGVybWluaXN0aWNhbGx5IGdlbmVyYXRlZAogICAgICAgICAgICBhdCBjb21waWxlIHRpbWUuCgogICAgICAgIDpwYXJhbSBmbGF0OiBXaWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRvIGlmIHRoZSBnaXZlbiBzZWxlY3RhYmxlCiAgICAgICAgIGlzIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgX2V4cHJlc3Npb24uSm9pbmAgLSBzZWUKICAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLkpvaW4uYWxpYXNgCiAgICAgICAgIGZvciBkZXRhaWxzLgoKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMC45LjAKCiAgICAgICAgKQJyWAAAAHK2AAAAKQJyPAAAAHJiAAAAKQRyKgEAAHI0AAAAclgAAABytgAAAHMEAAAAICAgIHI7AAAA2ghfZmFjdG9yeXoOQWxpYXMuX2ZhY3RvcnkOBQAAcyYAAACAAPViAQAQIqAq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BwIAZQhqCQAAAAAAAAAAZAamAQAAqwEAAAAAAAAAAGQHhACmAAAAqwAAAAAAAAAAAFoKiAB4AVoLUwApCXK8AAAAYWQBAABSZXByZXNlbnQgYSBUQUJMRVNBTVBMRSBjbGF1c2UuCgogICAgVGhpcyBvYmplY3QgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgOmZ1bmM6YF9leHByZXNzaW9uLnRhYmxlc2FtcGxlYCBtb2R1bGUKICAgIGxldmVsIGZ1bmN0aW9uIGFzIHdlbGwgYXMgdGhlIDptZXRoOmBfZXhwcmVzc2lvbi5Gcm9tQ2xhdXNlLnRhYmxlc2FtcGxlYAogICAgbWV0aG9kCiAgICBhdmFpbGFibGUgb24gYWxsIDpjbGFzczpgX2V4cHJlc3Npb24uRnJvbUNsYXVzZWAgc3ViY2xhc3Nlcy4KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEKCiAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgOmZ1bmM6YF9leHByZXNzaW9uLnRhYmxlc2FtcGxlYAoKICAgIHK/AAAATmMFAAAAAAAAAAAAAAAFAAAAAwAAAPNMAAAAlwB0AQAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAoAEAAAAAAAAAAAAAAAAAAAAAAAAAAHwCfAN8BKwBpgMAAKsDAAAAAAAAAABTACkCYasFAABSZXR1cm4gYSA6Y2xhc3M6YF9leHByZXNzaW9uLlRhYmxlU2FtcGxlYCBvYmplY3QuCgogICAgICAgIDpjbGFzczpgX2V4cHJlc3Npb24uVGFibGVTYW1wbGVgIGlzIGFuIDpjbGFzczpgX2V4cHJlc3Npb24uQWxpYXNgCiAgICAgICAgc3ViY2xhc3MgdGhhdCByZXByZXNlbnRzCiAgICAgICAgYSB0YWJsZSB3aXRoIHRoZSBUQUJMRVNBTVBMRSBjbGF1c2UgYXBwbGllZCB0byBpdC4KICAgICAgICA6ZnVuYzpgX2V4cHJlc3Npb24udGFibGVzYW1wbGVgCiAgICAgICAgaXMgYWxzbyBhdmFpbGFibGUgZnJvbSB0aGUgOmNsYXNzOmBfZXhwcmVzc2lvbi5Gcm9tQ2xhdXNlYAogICAgICAgIGNsYXNzIHZpYSB0aGUKICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uRnJvbUNsYXVzZS50YWJsZXNhbXBsZWAgbWV0aG9kLgoKICAgICAgICBUaGUgVEFCTEVTQU1QTEUgY2xhdXNlIGFsbG93cyBzZWxlY3RpbmcgYSByYW5kb21seSBzZWxlY3RlZCBhcHByb3hpbWF0ZQogICAgICAgIHBlcmNlbnRhZ2Ugb2Ygcm93cyBmcm9tIGEgdGFibGUuIEl0IHN1cHBvcnRzIG11bHRpcGxlIHNhbXBsaW5nIG1ldGhvZHMsCiAgICAgICAgbW9zdCBjb21tb25seSBCRVJOT1VMTEkgYW5kIFNZU1RFTS4KCiAgICAgICAgZS5nLjo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGZ1bmMKCiAgICAgICAgICAgIHNlbGVjdGFibGUgPSBwZW9wbGUudGFibGVzYW1wbGUoCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuYmVybm91bGxpKDEpLAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSdhbGlhcycsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlZWQ9ZnVuYy5yYW5kb20oKSkKICAgICAgICAgICAgc3RtdCA9IHNlbGVjdChbc2VsZWN0YWJsZS5jLnBlb3BsZV9pZF0pCgogICAgICAgIEFzc3VtaW5nIGBgcGVvcGxlYGAgd2l0aCBhIGNvbHVtbiBgYHBlb3BsZV9pZGBgLCB0aGUgYWJvdmUKICAgICAgICBzdGF0ZW1lbnQgd291bGQgcmVuZGVyIGFzOjoKCiAgICAgICAgICAgIFNFTEVDVCBhbGlhcy5wZW9wbGVfaWQgRlJPTQogICAgICAgICAgICBwZW9wbGUgQVMgYWxpYXMgVEFCTEVTQU1QTEUgYmVybm91bGxpKDpiZXJub3VsbGlfMSkKICAgICAgICAgICAgUkVQRUFUQUJMRSAocmFuZG9tKCkpCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMQoKICAgICAgICA6cGFyYW0gc2FtcGxpbmc6IGEgYGBmbG9hdGBgIHBlcmNlbnRhZ2UgYmV0d2VlbiAwIGFuZCAxMDAgb3IKICAgICAgICAgICAgOmNsYXNzOmBfZnVu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dWVyaWVzLCB3aGVyZSBhIFNFTEVDVCBzdGF0ZW1lbnQgY2FuIGRyYXcKICAgICAgICB1cG9uIHRoZSBzZXQgb2Ygcm93cyB0aGF0IGhhdmUgcHJldmlvdXNseSBiZWVuIHNlbGVjdGVkLgoKICAgICAgICBDVEVzIGNhbiBhbHNvIGJlIGFwcGxpZWQgdG8gRE1MIGNvbnN0cnVjdHMgVVBEQVRFLCBJTlNFUlQKICAgICAgICBhbmQgREVMRVRFIG9uIHNvbWUgZGF0YWJhc2VzLCBib3RoIGFzIGEgc291cmNlIG9mIENURSByb3dzCiAgICAgICAgd2hlbiBjb21iaW5lZCB3aXRoIFJFVFVSTklORywgYXMgd2VsbCBhcyBhIGNvbnN1bWVyIG9mCiAgICAgICAgQ1RFIHJvd3MuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4xIEFkZGVkIHN1cHBvcnQgZm9yIFVQREFURS9JTlNFUlQvREVMRVRFIGFzCiAgICAgICAgICAgQ1RFLCBDVEVzIGFkZGVkIHRvIFVQREFURS9JTlNFUlQvREVMRVRFLgoKICAgICAgICBTUUxBbGNoZW15IGRldGVjdHMgOmNsYXNzOmBfZXhwcmVzc2lvbi5DVEVgIG9iamVjdHMsIHdoaWNoIGFyZSB0cmVhdGVkCiAgICAgICAgc2ltaWxhcmx5IHRvIDpjbGFzczpgX2V4cHJlc3Npb24uQWxpYXNgIG9iamVjdHMsIGFzIHNwZWNpYWwgZWxlbWVudHMKICAgICAgICB0byBiZSBkZWxpdmVyZWQgdG8gdGhlIEZST00gY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQgYXMgd2VsbAogICAgICAgIGFzIHRvIGEgV0lUSCBjbGF1c2UgYXQgdGhlIHRvcCBvZiB0aGUgc3RhdGVtZW50LgoKICAgICAgICBGb3Igc3BlY2lhbCBwcmVmaXhlcyBzdWNoIGFzIFBvc3RncmVTUUwgIk1BVEVSSUFMSVpFRCIgYW5kCiAgICAgICAgIk5PVCBNQVRFUklBTElaRUQiLCB0aGUgOm1ldGg6YF9leHByZXNzaW9uLkNURS5wcmVmaXhfd2l0aGAKICAgICAgICBtZXRob2QgbWF5IGJlCiAgICAgICAgdXNlZCB0byBlc3RhYmxpc2ggdGhlc2UuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4zLjEzIEFkZGVkIHN1cHBvcnQgZm9yIHByZWZpeGVzLgogICAgICAgICAgIEluIHBhcnRpY3VsYXIgLSBNQVRFUklBTElaRUQgYW5kIE5PVCBNQVRFUklBTElaRUQuCgogICAgICAgIDpwYXJhbSBuYW1lOiBuYW1lIGdpdmVuIHRvIHRoZSBjb21tb24gdGFibGUgZXhwcmVzc2lvbi4gIExpa2UKICAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLkZyb21DbGF1c2UuYWxpYXNgLCB0aGUgbmFtZSBjYW4gYmUgbGVmdCBhcwogICAgICAgICBgYE5vbmVgYCBpbiB3aGljaCBjYXNlIGFuIGFub255bW91cyBzeW1ib2wgd2lsbCBiZSB1c2VkIGF0IHF1ZXJ5CiAgICAgICAgIGNvbXBpbGUgdGltZS4KICAgICAgICA6cGFyYW0gcmVjdXJzaXZlOiBpZiBgYFRydWVgYCwgd2lsbCByZW5kZXIgYGBXSVRIIFJFQ1VSU0lWRWBgLgogICAgICAgICBBIHJlY3Vyc2l2ZSBjb21tb24gdGFibGUgZXhwcmVzc2lvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGluCiAgICAgICAgIGNvbmp1bmN0aW9uIHdpdGggVU5JT04gQUxMIGluIG9yZGVyIHRvIGRlcml2ZSByb3dzCiAgICAgICAgIGZyb20gdGhvc2UgYWxyZWFkeSBzZWxlY3RlZC4KCiAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlcyBpbmNsdWRlIHR3byBmcm9tIFBvc3RncmVTUUwncyBkb2N1bWVudGF0aW9uIGF0CiAgICAgICAgaHR0cDovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1cnJlbnQvc3RhdGljL3F1ZXJpZXMtd2l0aC5odG1sLAogICAgICAgIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBleGFtcGxlcy4KCiAgICAgICAgRXhhbXBsZSAxLCBub24gcmVjdXJzaXZlOjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgKFRhYmxlLCBDb2x1bW4sIFN0cmluZywgSW50ZWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0YURhdGEsIHNlbGVjdCwgZnVuYykKCiAgICAgICAgICAgIG1ldGFkYXRhID0gTWV0YURhdGEoKQoKICAgICAgICAgICAgb3JkZXJzID0gVGFibGUoJ29yZGVycycsIG1ldGFkYXRhLAogICAgICAgICAgICAgICAgQ29sdW1uKCdyZWdpb24nLCBTdHJpbmcpLAogICAgICAgICAgICAgICAgQ29sdW1uKCdhbW91bnQnLCBJbnRlZ2VyKSwKICAgICAgICAgICAgICAgIENvbHVtbigncHJvZHVjdCcsIFN0cmluZyksCiAgICAgICAgICAgICAgICBDb2x1bW4oJ3F1YW50aXR5JywgSW50ZWdlcikKICAgICAgICAgICAgKQoKICAgICAgICAgICAgcmVnaW9uYWxfc2FsZXMgPSBzZWxlY3QoWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVycy5jLnJlZ2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLnN1bShvcmRlcnMuYy5hbW91bnQpLmxhYmVsKCd0b3RhbF9zYWxlcycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKS5ncm91cF9ieShvcmRlcnMuYy5yZWdpb24pLmN0ZSgicmVnaW9uYWxfc2FsZXMiKQoKCiAgICAgICAgICAgIHRvcF9yZWdpb25zID0gc2VsZWN0KFtyZWdpb25hbF9zYWxlcy5jLnJlZ2lvbl0pLlwKICAgICAgICAgICAgICAgICAgICB3aGVyZSgKICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uYWxfc2FsZXMuYy50b3RhbF9zYWxlcyA+CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLnN1bShyZWdpb25hbF9zYWxlcy5jLnRvdGFsX3NhbGVzKS8xMAogICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgICkuY3RlKCJ0b3BfcmVnaW9ucyIpCgogICAgICAgICAgICBzdGF0ZW1lbnQgPSBzZWxlY3QoWwogICAgICAgICAgICAgICAgICAgICAgICBvcmRlcnMuYy5yZWdpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVycy5jLnByb2R1Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuc3VtKG9yZGVycy5jLnF1YW50aXR5KS5sYWJlbCgicHJvZHVjdF91bml0cyIpLAogICAgICAgICAgICAgICAgICAgICAgICBmdW5jLnN1bShvcmRlcnMuYy5hbW91bnQpLmxhYmVsKCJwcm9kdWN0X3NhbGVzIikKICAgICAgICAgICAgICAgIF0pLndoZXJlKG9yZGVycy5jLnJlZ2lvbi5pbl8oCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0KFt0b3BfcmVnaW9ucy5jLnJlZ2lvbl0pCiAgICAgICAgICAgICAgICApKS5ncm91cF9ieShvcmRlcnMuYy5yZWdpb24sIG9yZGVycy5jLnByb2R1Y3QpCgogICAgICAgICAgICByZXN1bHQgPSBjb25uLmV4ZWN1dGUoc3RhdGVtZW50KS5mZXRjaGFsbCgpCgogICAgICAgIEV4YW1wbGUgMiwgV0lUSCBSRUNVUlNJVkU6OgoKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCAoVGFibGUsIENvbHVtbiwgU3RyaW5nLCBJbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXRhRGF0YSwgc2VsZWN0LCBmdW5jKQoKICAgICAgICAgICAgbWV0YWRhdGEgPSBNZXRhRGF0YSgpCgogICAgICAgICAgICBwYXJ0cyA9IFRhYmxlKCdwYXJ0cycsIG1ldGFkYXRhLAogICAgICAgICAgICAgICAgQ29sdW1uKCdwYXJ0JywgU3RyaW5nKSwKICAgICAgICAgICAgICAgIENvbHVtbignc3ViX3BhcnQnLCBTdHJpbmcpLAogICAgICAgICAgICAgICAgQ29sdW1uKCdxdWFudGl0eScsIEludGVnZXIpLAogICAgICAgICAgICApCgogICAgICAgICAgICBpbmNsdWRlZF9wYXJ0cyA9IHNlbGVjdChbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuYy5zdWJfcGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5jLnBhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuYy5xdWFudGl0eV0pLlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZShwYXJ0cy5jLnBhcnQ9PSdvdXIgcGFydCcpLlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGUocmVjdXJzaXZlPVRydWUpCgoKICAgICAgICAgICAgaW5jbF9hbGlhcyA9IGluY2x1ZGVkX3BhcnRzLmFsaWFzKCkKICAgICAgICAgICAgcGFydHNfYWxpYXMgPSBwYXJ0cy5hbGlhcygpCiAgICAgICAgICAgIGluY2x1ZGVkX3BhcnRzID0gaW5jbHVkZWRfcGFydHMudW5pb25fYWxsKAogICAgICAgICAgICAgICAgc2VsZWN0KFsKICAgICAgICAgICAgICAgICAgICBwYXJ0c19hbGlhcy5jLnN1Yl9wYXJ0LAogICAgICAgICAgICAgICAgICAgIHBhcnRzX2FsaWFzLmMucGFydCwKICAgICAgICAgICAgICAgICAgICBwYXJ0c19hbGlhcy5jLnF1YW50aXR5CiAgICAgICAgICAgICAgICBdKS4KICAgICAgICAgICAgICAgICAgICB3aGVyZShwYXJ0c19hbGlhcy5jLnBhcnQ9PWluY2xfYWxpYXMuYy5zdWJfcGFydCkKICAgICAgICAgICAgKQoKICAgICAgICAgICAgc3RhdGVtZW50ID0gc2VsZWN0KFsKICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWRfcGFydHMuYy5zdWJfcGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5zdW0oaW5jbHVkZWRfcGFydHMuYy5xdWFudGl0eSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwoJ3RvdGFsX3F1YW50aXR5JykKICAgICAgICAgICAgICAgICAgICBdKS5cCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkoaW5jbHVkZWRfcGFydHMuYy5zdWJfcGFydCkKCiAgICAgICAgICAgIHJlc3VsdCA9IGNvbm4uZXhlY3V0ZShzdGF0ZW1lbnQpLmZldGNoYWxsKCkKCiAgICAgICAgRXhhbXBsZSAzLCBhbiB1cHNlcnQgdXNpbmcgVVBEQVRFIGFuZCBJTlNFUlQgd2l0aCBDVEVzOjoKCiAgICAgICAgICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGUKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCAoTWV0YURhdGEsIFRhYmxlLCBDb2x1bW4sIEludGVnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGUsIHNlbGVjdCwgbGl0ZXJhbCwgYW5kXywgZXhpc3RzKQoKICAgICAgICAgICAgbWV0YWRhdGEgPSBNZXRhRGF0YSgpCgogICAgICAgICAgICB2aXNpdG9ycyA9IFRhYmxlKCd2aXNpdG9ycycsIG1ldGFkYXRhLAogICAgICAgICAgICAgICAgQ29sdW1uKCdwcm9kdWN0X2lkJywgSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgICAgICAgICBDb2x1bW4oJ2RhdGUnLCBEYXRlLCBwcmltYXJ5X2tleT1UcnVlKSwKICAgICAgICAgICAgICAgIENvbHVtbignY291bnQnLCBJbnRlZ2VyKSwKICAgICAgICAgICAgKQoKICAgICAgICAgICAgIyBhZGQgNSB2aXNpdG9ycyBmb3IgdGhlIHByb2R1Y3RfaWQgPT0gMQogICAgICAgICAgICBwcm9kdWN0X2lkID0gMQogICAgICAgICAgICBkYXkgPSBkYXRlLnRvZGF5KCkKICAgICAgICAgICAgY291bnQgPSA1CgogICAgICAgICAgICB1cGRhdGVfY3RlID0gKAogICAgICAgICAgICAgICAgdmlzaXRvcnMudXBkYXRlKCkKICAgICAgICAgICAgICAgIC53aGVyZShhbmRfKHZpc2l0b3JzLmMucHJvZHVjdF9pZCA9PSBwcm9kdWN0X2lk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LkNvbXBvdW5kU2VsZWN0YAogICAgd2hlcmUgZWxlbWVudHMgc3VjaCBhcyBPUkRFUiBCWSwgR1JPVVAgQlkgY2FuIGJlIGFkZGVkIGFuZCBjb2x1bW4KICAgIHJlbmRlcmluZyBjYW4gYmUgY29udHJvbGxlZC4gIENvbXBhcmUgdG8gOmNsYXNzOmAuVGV4dEFzRnJvbWAsIHdoaWNoLAogICAgd2hpbGUgaXQgc3ViY2xhc3NlcyA6Y2xhc3M6YF9leHByZXNzaW9uLlNlbGVjdEJhc2VgCiAgICBhbmQgaXMgYWxzbyBhIFNFTEVDVCBjb25zdHJ1Y3QsCiAgICByZXByZXNlbnRzIGEgZml4ZWQgdGV4dHVhbCBzdHJpbmcgd2hpY2ggY2Fubm90IGJlIGFsdGVyZWQgYXQgdGhpcyBsZXZlbCwKICAgIG9ubHkgd3JhcHBlZCBhcyBhIHN1YnF1ZXJ5LgoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuOS4wIDpjbGFzczpgX2V4cHJlc3Npb24uR2VuZXJhdGl2ZVNlbGVjdGAgd2FzIGFkZGVkIHRvCiAgICAgICBwcm92aWRlIGZ1bmN0aW9uYWxpdHkgc3BlY2lmaWMgdG8gOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgIGFuZAogICAgICAgOmNsYXNzOmBfc2VsZWN0YWJsZS5Db21wb3VuZFNlbGVjdGAgd2hpbGUgYWxsb3dpbmcKICAgICAgIDpjbGFzczpgX2V4cHJlc3Npb24uU2VsZWN0QmFzZWAgdG8gYmUKICAgICAgIHVzZWQgZm9yIG90aGVyIFNFTEVDVC1saWtlIG9iamVjdHMsIGUuZy4gOmNsYXNzOmAuVGV4dEFzRnJvbWAuCgogICAgTkZjCQAAAAAAAAAAAAAABQAAAAMAAADz2gEAAJcAfAF8AF8AAAAAAAAAAAB8AmQBdQFyH3QCAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAB8AqYBAACrAQAAAAAAAAAAfABfAwAAAAAAAAAAfAiBNXQJAAAAAAAAAAAAAGoFAAAAAAAAAABkAqYBAACrAQAAAAAAAAAAAQB8AGoGAAAAAAAAAACgBwAAAAAAAAAAAAAAAAAAAAAAAAAAZAN8CGkBpgEAAKsBAAAA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IE9yYWNsZSwgdGhlIGFib3ZlIHdvdWxkIHJlbmRlciBhCiAgICAgICAgc3RhdGVtZW50IGxpa2U6OgoKICAgICAgICAgICAgU0VMRUNUIHRhYmxlLmEsIHRhYmxlLmIgRlJPTSB0YWJsZSBGT1IgVVBEQVRFIE5PV0FJVAoKICAgICAgICBvbiBvdGhlciBiYWNrZW5kcywgdGhlIGBgbm93YWl0YGAgb3B0aW9uIGlzIGlnbm9yZWQgYW5kIGluc3RlYWQKICAgICAgICB3b3VsZCBwcm9kdWNlOjoKCiAgICAgICAgICAgIFNFTEVDVCB0YWJsZS5hLCB0YWJsZS5iIEZST00gdGFibGUgRk9SIFVQREFURQoKICAgICAgICBXaGVuIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cywgdGhlIHN0YXRlbWVudCB3aWxsIHJlbmRlciB3aXRoCiAgICAgICAgdGhlIHN1ZmZpeCBgYEZPUiBVUERBVEVgYC4gICBBZGRpdGlvbmFsIGFyZ3VtZW50cyBjYW4gdGhlbiBiZQogICAgICAgIHByb3ZpZGVkIHdoaWNoIGFsbG93IGZvciBjb21tb24gZGF0YWJhc2Utc3BlY2lmaWMKICAgICAgICB2YXJpYW50cy4KCiAgICAgICAgOnBhcmFtIG5vd2FpdDogYm9vbGVhbjsgd2lsbCByZW5kZXIgYGBGT1IgVVBEQVRFIE5PV0FJVGBgIG9uIE9yYWNsZQogICAgICAgICBhbmQgUG9zdGdyZVNRTCBkaWFsZWN0cy4KCiAgICAgICAgOnBhcmFtIHJlYWQ6IGJvb2xlYW47IHdpbGwgcmVuZGVyIGBgTE9DSyBJTiBTSEFSRSBNT0RFYGAgb24gTXlTUUwsCiAgICAgICAgIGBgRk9SIFNIQVJFYGAgb24gUG9zdGdyZVNRTC4gIE9uIFBvc3RncmVTUUwsIHdoZW4gY29tYmluZWQgd2l0aAogICAgICAgICBgYG5vd2FpdGBgLCB3aWxsIHJlbmRlciBgYEZPUiBTSEFSRSBOT1dBSVRgYC4KCiAgICAgICAgOnBhcmFtIG9mOiBTUUwgZXhwcmVzc2lvbiBvciBsaXN0IG9mIFNRTCBleHByZXNzaW9uIGVsZW1lbnRzCiAgICAgICAgICh0eXBpY2FsbHkgOmNsYXNzOmBfc2NoZW1hLkNvbHVtbmAKICAgICAgICAgb2JqZWN0cyBvciBhIGNvbXBhdGlibGUgZXhwcmVzc2lvbikgd2hpY2gKICAgICAgICAgd2lsbCByZW5kZXIgaW50byBhIGBgRk9SIFVQREFURSBPRmBgIGNsYXVzZTsgc3VwcG9ydGVkIGJ5IFBvc3RncmVTUUwKICAgICAgICAgYW5kIE9yYWNsZS4gIE1heSByZW5kZXIgYXMgYSB0YWJsZSBvciBhcyBhIGNvbHVtbiBkZXBlbmRpbmcgb24KICAgICAgICAgYmFja2VuZC4KCiAgICAgICAgOnBhcmFtIHNraXBfbG9ja2VkOiBib29sZWFuLCB3aWxsIHJlbmRlciBgYEZPUiBVUERBVEUgU0tJUCBMT0NLRURgYAogICAgICAgICBvbiBPcmFjbGUgYW5kIFBvc3RncmVTUUwgZGlhbGVjdHMgb3IgYGBGT1IgU0hBUkUgU0tJUCBMT0NLRURgYCBpZgogICAgICAgICBgYHJlYWQ9VHJ1ZWBgIGlzIGFsc28gc3BlY2lmaWVkLgoKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xLjAKCiAgICAgICAgOnBhcmFtIGtleV9zaGFyZTogYm9vbGVhbiwgd2lsbCByZW5kZXIgYGBGT1IgTk8gS0VZIFVQREFURWBgLAogICAgICAgICBvciBpZiBjb21iaW5lZCB3aXRoIGBgcmVhZD1UcnVlYGAgd2lsbCByZW5kZXIgYGBGT1IgS0VZIFNIQVJFYGAsCiAgICAgICAgIG9uIHRoZSBQb3N0Z3JlU1FMIGRpYWxlY3QuCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEuMAoKICAgICAgICApBXIjAgAAciQCAAByLQIAAHIrAgAAciwCAABOKQJyIQIAAHJHAgAAcjYCAABzBgAAACAgICAgIHI7AAAA2g93aXRoX2Zvcl91cGRhdGV6IEdlbmVyYXRpdmVTZWxlY3Qud2l0aF9mb3JfdXBkYXRl/QgAAHMxAAAAgAD1dAEAICzYExnYERXYDxHYGCPYFh/wCwYgCvEABiAK9AAGIAqIBNQIHNAIHNAIHHJFAAAAYwEAAAAAAAAAAAAAAAIAAAADAAAA8xQAAACXAGQBfABfAAAAAAAAAAAAZAJTACkDYakBAABSZXR1cm4gYSBuZXcgc2VsZWN0YWJsZSB3aXRoIHRoZSAndXNlX2xhYmVscycgZmxhZyBzZXQgdG8gVHJ1ZS4KCiAgICAgICAgVGhpcyB3aWxsIHJlc3VsdCBpbiBjb2x1bW4gZXhwcmVzc2lvbnMgYmVpbmcgZ2VuZXJhdGVkIHVzaW5nIGxhYmVscwogICAgICAgIGFnYWluc3QgdGhlaXIgdGFibGUgbmFtZSwgc3VjaCBhcyAiU0VMRUNUIHNvbWVjb2x1bW4gQVMKICAgICAgICB0YWJsZW5hbWVfc29tZWNvbHVtbiIuIFRoaXMgYWxsb3dzIHNlbGVjdGFibGVzIHdoaWNoIGNvbnRhaW4gbXVsdGlwbGUKICAgICAgICBGUk9NIGNsYXVzZXMgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgb2YgY29sdW1uIG5hbWVzIHJlZ2FyZGxlc3Mgb2YKICAgICAgICBuYW1lIGNvbmZsaWN0cyBhbW9uZyB0aGUgaW5kaXZpZHVhbCBGUk9NIGNsYXVzZXMuCgogICAgICAgIFROKQFykQEAAHJKAAAAcwEAAAAgcjsAAADaDGFwcGx5X2xhYmVsc3odR2VuZXJhdGl2ZVNlbGVjdC5hcHBseV9sYWJlbHM/CQAAcw8AAACAAPAWABsfiASMD4gPiA9yRQAAAGMBAAAAAAAAAAAAAAAEAAAAAwAAAPMsAAAAlwB0AQAAAAAAAAAAAAB8AGoBAAAAAAAAAABkAaYCAACrAgAAAAAAAAAAUwApAnr7R2V0IGFuIGludGVnZXIgdmFsdWUgZm9yIHRoZSBsaW1pdC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZAogICAgICAgIGJ5IGNvZGUgdGhhdCBjYW5ub3Qgc3VwcG9ydCBhIGxpbWl0IGFzIGEgQmluZFBhcmFtZXRlciBvcgogICAgICAgIG90aGVyIGN1c3RvbSBjbGF1c2UgYXMgaXQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhlIGxpbWl0CiAgICAgICAgaXNuJ3QgY3VycmVudGx5IHNldCB0byBhbiBpbnRlZ2VyLgoKICAgICAgICByTwIAACkCcl8AAABySQIAAHJKAAAAcwEA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YXVzZWAuCgogICAgICAgIEFsbCBhcmd1bWVudHMgd2hpY2ggYWNjZXB0IDpjbGFzczpgX2V4cHJlc3Npb24uQ2xhdXNlRWxlbWVudGAKICAgICAgICBhcmd1bWVudHMgYWxzbwogICAgICAgIGFjY2VwdCBzdHJpbmcgYXJndW1lbnRzLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCBhcyBhcHByb3ByaWF0ZSBpbnRvCiAgICAgICAgZWl0aGVyIDpmdW5jOmBfZXhwcmVzc2lvbi50ZXh0YCBvcgogICAgICAgIDpmdW5jOmBfZXhwcmVzc2lvbi5saXRlcmFsX2NvbHVtbmAgY29uc3RydWN0cy4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6cmVmOmBjb3JldHV0b3JpYWxfc2VsZWN0aW5nYCAtIENvcmUgVHV0b3JpYWwgZGVzY3JpcHRpb24gb2YKICAgICAgICAgICAgOmZ1bmM6YF9leHByZXNzaW9uLnNlbGVjdGAuCgogICAgICAgIDpwYXJhbSBjb2x1bW5zOgogICAgICAgICAgQSBsaXN0IG9mIDpjbGFzczpgX2V4cHJlc3Npb24uQ29sdW1uRWxlbWVudGAgb3IKICAgICAgICAgIDpjbGFzczpgX2V4cHJlc3Npb24uRnJvbUNsYXVzZWAKICAgICAgICAgIG9iamVjdHMgd2hpY2ggd2lsbCBmb3JtIHRoZSBjb2x1bW5zIGNsYXVzZSBvZiB0aGUgcmVzdWx0aW5nCiAgICAgICAgICBzdGF0ZW1lbnQuICAgRm9yIHRob3NlIG9iamVjdHMgdGhhdCBhcmUgaW5zdGFuY2VzIG9mCiAgICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkZyb21DbGF1c2VgICh0eXBpY2FsbHkgOmNsYXNzOmBfc2NoZW1hLlRhYmxlYAogICAgICAgICAgb3IgOmNsYXNzOmBfZXhwcmVzc2lvbi5BbGlhc2AKICAgICAgICAgIG9iamVjdHMpLCB0aGUgOmF0dHI6YF9leHByZXNzaW9uLkZyb21DbGF1c2UuY2AKICAgICAgICAgIGNvbGxlY3Rpb24gaXMgZXh0cmFjdGVkCiAgICAgICAgICB0byBmb3JtIGEgY29sbGVjdGlvbiBvZiA6Y2xhc3M6YF9leHByZXNzaW9uLkNvbHVtbkVsZW1lbnRgIG9iamVjdHMuCgogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgd2lsbCBhbHNvIGFjY2VwdCA6Y2xhc3M6YF9leHByZXNzaW9uLlRleHRDbGF1c2VgCiAgICAgICAgICBjb25zdHJ1Y3RzIGFzCiAgICAgICAgICBnaXZlbiwgYXMgd2VsbCBhcyBPUk0tbWFwcGVkIGNsYXNzZXMuCgogICAgICAgICAgLi4gbm90ZTo6CgogICAgICAgICAgICBUaGUgOnBhcmFtcmVmOmBfZXhwcmVzc2lvbi5zZWxlY3QuY29sdW1uc2AKICAgICAgICAgICAgcGFyYW1ldGVyIGlzIG5vdCBhdmFpbGFibGUKICAgICAgICAgICAgaW4gdGhlIG1ldGhvZCBmb3JtIG9mIDpmdW5jOmBfZXhwcmVzc2lvbi5zZWxlY3RgLCBlLmcuCiAgICAgICAgICAgIDptZXRoOmBfZXhwcmVzc2lvbi5Gcm9tQ2xhdXNlLnNlbGVjdGAuCgogICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LmNvbHVtbmAKCiAgICAgICAgICAgIDptZXRoOmBfZXhwcmVzc2lvbi5TZWxlY3Qud2l0aF9vbmx5X2NvbHVtbnNgCgogICAgICAgIDpwYXJhbSB3aGVyZWNsYXVzZToKICAgICAgICAgIEEgOmNsYXNzOmBfZXhwcmVzc2lvbi5DbGF1c2VFbGVtZW50YAogICAgICAgICAgZXhwcmVzc2lvbiB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZm9ybSB0aGUKICAgICAgICAgIGBgV0hFUkVgYCBjbGF1c2UuICAgSXQgaXMgdHlwaWNhbGx5IHByZWZlcmFibGUgdG8gYWRkIFdIRVJFCiAgICAgICAgICBjcml0ZXJpb24gdG8gYW4gZXhpc3RpbmcgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgCiAgICAgICAgICB1c2luZyBtZXRob2QgY2hhaW5pbmcKICAgICAgICAgIHdpdGggOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC53aGVyZWAuCgogICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LndoZXJlYAoKICAgICAgICA6cGFyYW0gZnJvbV9vYmo6CiAgICAgICAgICBBIGxpc3Qgb2YgOmNsYXNzOmBfZXhwcmVzc2lvbi5DbGF1c2VFbGVtZW50YAogICAgICAgICAgb2JqZWN0cyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZQogICAgICAgICAgYGBGUk9NYGAgY2xhdXNlIG9mIHRoZSByZXN1bHRpbmcgc3RhdGVtZW50LiAgVGhpcyBpcyBlcXVpdmFsZW50CiAgICAgICAgICB0byBjYWxsaW5nIDptZXRoOmBfZXhwcmVzc2lvbi5TZWxlY3Quc2VsZWN0X2Zyb21gCiAgICAgICAgICB1c2luZyBtZXRob2QgY2hhaW5pbmcgb24KICAgICAgICAgIGFuIGV4aXN0aW5nIDpjbGFzczpgX2V4cHJlc3Npb24uU2VsZWN0YCBvYmplY3QuCgogICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LnNlbGVjdF9mcm9tYAogICAgICAgICAgICAtIGZ1bGwgZGVzY3JpcHRpb24gb2YgZXhwbGljaXQKICAgICAgICAgICAgRlJPTSBjbGF1c2Ugc3BlY2lmaWNhdGlvbi4KCiAgICAgICAgOnBhcmFtIGF1dG9jb21taXQ6IGxlZ2FjeSBhdXRvY29tbWl0IHBhcmFtZXRlci4KCiAgICAgICAgOnBhcmFtIGJpbmQ9Tm9uZToKICAgICAgICAgIGFuIDpjbGFzczpgX2VuZ2luZS5FbmdpbmVgIG9yIDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBpbnN0YW5jZQogICAgICAgICAgdG8gd2hpY2ggdGhlCiAgICAgICAgICByZXN1bHRpbmcgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgIG9iamVjdCB3aWxsIGJlIGJvdW5kLiAgVGhlCiAgICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLlNlbGVjdGAKICAgICAgICAgIG9iamVjdCB3aWxsIG90aGVyd2lzZSBhdXRvbWF0aWNhbGx5IGJpbmQgdG8KICAgICAgICAgIHdoYXRldmVyIDpjbGFzczpgfi5iYXNlLkNvbm5lY3RhYmxlYCBpbnN0YW5jZXMgY2FuIGJlIGxvY2F0ZWQgd2l0aGluCiAgICAgICAgICBpdHMgY29udGFpbmVkIDpjbGFzczpgX2V4cHJlc3Npb24uQ2xhdXNlRWxlbWVudGAgbWVtYmVycy4KCiAgICAgICAgOnBhcmFtIGNvcnJlbGF0ZT1UcnVlOgogICAgICAgICAgaW5kaWNhdGVzIHRoYXQgdGhpcyA6Y2xhc3M6YF9leHByZXNzaW9uLlNlbGVjdGAKICAgICAgICAgIG9iamVjdCBzaG91bGQgaGF2ZSBpdHMKICAgICAgICAgIGNvbnRhaW5lZCA6Y2xhc3M6YF9leHByZXNzaW9uLkZyb21DbGF1c2VgCiAgICAgICAgICBlbGVtZW50cyAiY29ycmVsYXRlZCIgdG8gYW4gZW5jbG9zaW5nCiAgICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLlNlbGVjdGAgb2JqZWN0LgogICAgICAgICAgSXQgaXMgdHlwaWNhbGx5IHByZWZlcmFibGUgdG8gc3BlY2lmeQogICAgICAgICAgY29ycmVsYXRpb25zIG9uIGFuIGV4aXN0aW5nIDpjbGFzczpgX2V4cHJlc3Npb24uU2VsZWN0YAogICAgICAgICAgY29uc3RydWN0IHVzaW5nCiAgICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LmNvcnJlbGF0ZWAuCgogICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LmNvcnJlbGF0ZWAKICAgICAgICAgICAgLSBmdWxsIGRlc2NyaXB0aW9uIG9mIGNvcnJlbGF0aW9uLgoKICAgICAgICA6cGFyYW0gZGlzdGluY3Q9RmFsc2U6CiAgICAgICAgICB3aGVuIGBgVHJ1ZWBgLCBhcHBsaWVzIGEgYGBESVNUSU5DVGBgIHF1YWxpZmllciB0byB0aGUgY29sdW1ucwogICAgICAgICAgY2xhdXNlIG9mIHRoZSByZXN1bHRpbmcgc3RhdGVtZW50LgoKICAgICAgICAgIFRoZSBib29sZWFuIGFyZ3VtZW50IG1heSBhbHNvIGJlIGEgY29sdW1uIGV4cHJlc3Npb24gb3IgbGlzdAogICAgICAgICAgb2YgY29sdW1uIGV4cHJlc3Npb25zIC0gdGhpcyBpcyBhIHNwZWNpYWwgY2FsbGluZyBmb3JtIHdoaWNoCiAgICAgICAgICBpcyB1bmRlcnN0b29kIGJ5IHRoZSBQb3N0Z3JlU1FMIGRpYWxlY3QgdG8gcmVuZGVyIHRoZQogICAgICAgICAgYGBESVNUSU5DVCBPTiAoPGNvbHVtbnM+KWBgIHN5bnRheC4KCiAgICAgICAgICBgYGRpc3RpbmN0YGAgaXMgYWxzbyBhdmFpbGFibGUgb24gYW4gZXhpc3RpbmcKICAgICAgICAgIDpjbGFzczpgX2V4cHJlc3Npb24uU2VsZWN0YAogICAgICAgICAgb2JqZWN0IHZpYSB0aGUgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC5kaXN0aW5jdGAgbWV0aG9kLgoKICAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC5kaXN0aW5jdGAKCiAgICAgICAgOnBhcmFtIGZvcl91cGRhdGU9RmFsc2U6CiAgICAgICAgICB3aGVuIGBgVHJ1ZWBgLCBhcHBsaWVzIGBgRk9SIFVQREFURWBgIHRvIHRoZSBlbmQgb2YgdGhlCiAgICAgICAgICByZXN1bHRpbmcgc3RhdGVtZW50LgoKICAgICAgICAgIGBgZm9yX3VwZGF0ZWBgIGFjY2VwdHMgdmFyaW91cyBzdHJpbmcgdmFsdWVzIGludGVycHJldGVkIGJ5CiAgICAgICAgICBzcGVjaWZpYyBiYWNrZW5kcywgaW5jbHVkaW5nOgoKICAgICAgICAgICogYGAicmVhZCJgYCAtIG9uIE15U1FMLCB0cmFuc2xhdGVzIHRvIGBgTE9DSyBJTiBTSEFSRSBNT0RFYGA7CiAgICAgICAgICAgIG9uIFBvc3RncmVTUUwsIHRyYW5zbGF0ZXMgdG8gYGBGT1IgU0hBUkVgYC4KICAgICAgICAgICogYGAibm93YWl0ImBgIC0gb24gUG9zdGdyZVNRTCBhbmQgT3JhY2xlLCB0cmFuc2xhdGVzIHRvCiAgICAgICAgICAgIGBgRk9SIFVQREFURSBOT1dBSVRgYC4KICAgICAgICAgICogYGAicmVhZF9ub3dhaXQiYGAgLSBvbiBQb3N0Z3JlU1FMLCB0cmFuc2xhdGVzIHRvCiAgICAgICAgICAgIGBgRk9SIFNIQVJFIE5PV0FJVGBgLgoKICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LndpdGhfZm9yX3VwZGF0ZWAgLSBpbXByb3ZlZCBBUEkgZm9yCiAgICAgICAgICAgIHNwZWNpZnlpbmcgdGhlIGBgRk9SIFVQREFURWBgIGNsYXVzZS4KCiAgICAgICAgOnBhcmFtIGdyb3VwX2J5OgogICAgICAgICAgYSBsaXN0IG9mIDpjbGFzczpgX2V4cHJlc3Npb24uQ2xhdXNlRWxlbWVudGAKICAgICAgICAgIG9iamVjdHMgd2hpY2ggd2lsbCBjb21wcmlzZSB0aGUKICAgICAgICAgIGBgR1JPVVAgQllgYCBjbGF1c2Ugb2YgdGhlIHJlc3VsdGluZyBzZWxlY3QuICBUaGlzIHBhcmFtZXRlcgogICAgICAgICAgaXMgdHlwaWNhbGx5IHNwZWNpZmllZCBtb3JlIG5hdHVyYWxseSB1c2luZyB0aGUKICAgICAgICAgIDptZXRoOmBfZXhwcmVzc2lvbi5TZWxlY3QuZ3JvdXBfYnlgIG1ldGhvZCBvbiBhbiBleGlzdGluZwogICAgICAgICAgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgLgoKICAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC5ncm91cF9ieWAKCiAgICAgICAgOnBhcmFtIGhhdmluZzoKICAgICAgICAgIGEgOmNsYXNzOmBfZXhwcmVzc2lvbi5DbGF1c2VFbGVtZW50YAogICAgICAgICAgdGhhdCB3aWxsIGNvbXByaXNlIHRoZSBgYEhBVklOR2BgIGNsYXVzZQogICAgICAgICAgb2YgdGhlIHJlc3VsdGluZyBzZWxlY3Qgd2hlbiBgYEdST1VQIEJZYGAgaXMgdXNlZC4gIFRoaXMgcGFyYW1ldGVyCiAgICAgICAgICBpcyB0eXBpY2FsbHkgc3BlY2lmaWVkIG1vcmUgbmF0dXJhbGx5IHVzaW5nIHRoZQogICAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC5oYXZpbmdgIG1ldGhvZCBvbiBhbiBleGlzdGluZwogICAgICAgICAgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgLgoKICAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC5oYXZpbmdgCgogICAgICAgIDpwYXJhbSBsaW1pdD1Ob25lOgogICAgICAgICAgYSBudW1lcmljYWwgdmFsdWUgd2hpY2ggdXN1YWxseSByZW5kZXJzIGFzIGEgYGBMSU1JVGBgCiAgICAgICAgICBleHByZXNzaW9uIGluIHRoZSByZXN1bHRpbmcgc2VsZWN0LiAgQmFja2VuZHMgdGhhdCBkb24ndAogICAgICAgICAgc3VwcG9ydCBgYExJTUlUYGAgd2lsbCBhdHRlbXB0IHRvIHByb3ZpZGUgc2ltaWxhcgogICAgICAgICAgZnVuY3Rpb25hbGl0eS4gICAgVGhpcyBwYXJhbWV0ZXIgaXMgdHlwaWNhbGx5IHNwZWNpZmllZCBtb3JlCiAgICAgICAgICBuYXR1cmFsbHkgdXNpbmcgdGhlIDptZXRoOmBfZXhwcmVzc2lvbi5TZWxlY3QubGltaXRgCiAgICAgICAgICBtZXRob2Qgb24gYW4gZXhpc3RpbmcKICAgICAgICAgIDpjbGFzczpgX2V4cHJlc3Npb24uU2VsZWN0YC4KCiAgICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmBfZXhwcmVzc2lvbi5TZWxlY3QubGltaXRgCgogICAgICAgIDpwYXJhbSBvZmZzZXQ9Tm9uZToKICAgICAgICAgIGEgbnVtZXJpYyB2YWx1ZSB3aGljaCB1c3VhbGx5IHJlbmRlcnMgYXMgYW4gYGBPRkZTRVRgYAogICAgICAgICAgZXhwcmVzc2lvbiBpbiB0aGUgcmVzdWx0aW5nIHNlbGVjdC4gIEJhY2tlbmRzIHRoYXQgZG9uJ3QKICAgICAgICAgIHN1cHBvcnQgYGBPRkZTRVRgYCB3aWxsIGF0dGVtcHQgdG8gcHJvdmlkZSBzaW1pbGFyCiAgICAgICAgICBmdW5jdGlvbmFsaXR5LiAgVGhpcyBwYXJhbWV0ZXIgaXMgdHlwaWNhbGx5IHNwZWNpZmllZCBtb3JlIG5hdHVyYWxseQogICAgICAgICAgdXNpbmcgdGhlIDptZXRoOmBfZXhwcmVzc2lvbi5TZWxlY3Qub2Zmc2V0YCBtZXRob2Qgb24gYW4gZXhpc3RpbmcKICAgICAgICAgIDpjbGFzczpgX2V4cHJlc3Npb24uU2VsZWN0YC4KCiAgICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmBfZXhwcmVzc2lvbi5TZWxlY3Qub2Zmc2V0YAoKICAgICAgICA6cGFyYW0gb3JkZXJfYnk6CiAgICAgICAgICBhIHNjYWxhciBvciBsaXN0IG9mIDpjbGFzczpgX2V4cHJlc3Npb24uQ2xhdXNlRWxlbWVudGAKICAgICAgICAgIG9iamVjdHMgd2hpY2ggd2lsbAogICAgICAgICAgY29tcHJpc2UgdGhlIGBgT1JERVIgQllgYCBjbGF1c2Ugb2YgdGhlIHJlc3VsdGluZyBzZWxlY3QuCiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyB0eXBpY2FsbHkgc3BlY2lmaWVkIG1vcmUgbmF0dXJhbGx5IHVzaW5nIHRoZQogICAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC5vcmRlcl9ieWAgbWV0aG9kIG9uIGFuIGV4aXN0aW5nCiAgICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLlNlbGVjdGAuCgogICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0Lm9yZGVyX2J5YAoKICAgICAgICA6cGFyYW0gdXNlX2xhYmVscz1GYWxzZToKICAgICAgICAgIHdoZW4gYGBUcnVlYGAsIHRoZSBzdGF0ZW1lbnQgd2lsbCBiZSBnZW5lcmF0ZWQg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AmHfBAAAQWRkIGFuIGluZGV4aW5nIG9yIG90aGVyIGV4ZWN1dGlvbmFsIGNvbnRleHQgaGludCBmb3IgdGhlIGdpdmVuCiAgICAgICAgc2VsZWN0YWJsZSB0byB0aGlzIDpjbGFzczpgX2V4cHJlc3Npb24uU2VsZWN0YC4KCiAgICAgICAgVGhlIHRleHQgb2YgdGhlIGhpbnQgaXMgcmVuZGVyZWQgaW4gdGhlIGFwcHJvcHJpYXRlCiAgICAgICAgbG9jYXRpb24gZm9yIHRoZSBkYXRhYmFzZSBiYWNrZW5kIGluIHVzZSwgcmVsYXRpdmUKICAgICAgICB0byB0aGUgZ2l2ZW4gOmNsYXNzOmBfc2NoZW1hLlRhYmxlYCBvciA6Y2xhc3M6YF9leHByZXNzaW9uLkFsaWFzYAogICAgICAgIHBhc3NlZCBhcyB0aGUKICAgICAgICBgYHNlbGVjdGFibGVgYCBhcmd1bWVudC4gVGhlIGRpYWxlY3QgaW1wbGVtZW50YXRpb24KICAgICAgICB0eXBpY2FsbHkgdXNlcyBQeXRob24gc3RyaW5nIHN1YnN0aXR1dGlvbiBzeW50YXgKICAgICAgICB3aXRoIHRoZSB0b2tlbiBgYCUobmFtZSlzYGAgdG8gcmVuZGVyIHRoZSBuYW1lIG9mCiAgICAgICAgdGhlIHRhYmxlIG9yIGFsaWFzLiBFLmcuIHdoZW4gdXNpbmcgT3JhY2xlLCB0aGUKICAgICAgICBmb2xsb3dpbmc6OgoKICAgICAgICAgICAgc2VsZWN0KFtteXRhYmxlXSkuXAogICAgICAgICAgICAgICAgd2l0aF9oaW50KG15dGFibGUsICJpbmRleCglKG5hbWUpcyBpeF9teXRhYmxlKSIpCgogICAgICAgIFdvdWxkIHJlbmRlciBTUUwgYXM6OgoKICAgICAgICAgICAgc2VsZWN0IC8qKyBpbmRleChteXRhYmxlIGl4X215dGFibGUpICovIC4uLiBmcm9tIG15dGFibGUKCiAgICAgICAgVGhlIGBgZGlhbGVjdF9uYW1lYGAgb3B0aW9uIHdpbGwgbGltaXQgdGhlIHJlbmRlcmluZyBvZiBhIHBhcnRpY3VsYXIKICAgICAgICBoaW50IHRvIGEgcGFydGljdWxhciBi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AAAAAAAAAAAAAAAAAAIAfAFqAQAAAAAAAAAAfABqAgAAAAAAAAAAZwF8AGoDAAAAAAAAAABmAXQJAAAAAAAAAAAAAHwAagUAAAAAAAAAAKYBAACrAQAAAAAAAAAAegAAAKIBUgBkAXwCaQGOAaYBAACrAQAAAAAAAAAAUwApAmEXBAAAUmV0dXJuIGEgbmV3IDpmdW5jOmBfZXhwcmVzc2lvbi5zZWxlY3RgIGNvbnN0cnVjdCB3aXRoIHJlZHVuZGFudGx5CiAgICAgICAgbmFtZWQsIGVxdWl2YWxlbnRseS12YWx1ZWQgY29sdW1ucyByZW1vdmVkIGZyb20gdGhlIGNvbHVtbnMgY2xhdXNlLgoKICAgICAgICAiUmVkdW5kYW50IiBoZXJlIG1lYW5zIHR3byBjb2x1bW5zIHdoZXJlIG9uZSByZWZlcnMgdG8gdGhlCiAgICAgICAgb3RoZXIgZWl0aGVyIGJhc2VkIG9uIGZvcmVpZ24ga2V5LCBvciB2aWEgYSBzaW1wbGUgZXF1YWxpdHkKICAgICAgICBjb21wYXJpc29uIGluIHRoZSBXSEVSRSBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudC4gICBUaGUgcHJpbWFyeSBwdXJwb3NlCiAgICAgICAgb2YgdGhpcyBtZXRob2QgaXMgdG8gYXV0b21hdGljYWxseSBjb25zdHJ1Y3QgYSBzZWxlY3Qgc3RhdGVtZW50CiAgICAgICAgd2l0aCBhbGwgdW5pcXVlbHktbmFtZWQgY29sdW1ucywgd2l0aG91dCB0aGUgbmVlZCB0byB1c2UKICAgICAgICB0YWJsZS1xdWFsaWZpZWQgbGFiZWxzIGFzIDptZXRoOmBfZXhwcmVzc2lvbi5TZWxlY3QuYXBwbHlfbGFiZWxzYAogICAgICAgIGRvZXMuCgogICAgICAgIFdoZW4gY29sdW1ucyBhcmUgb21pdHRlZCBiYXNlZCBvbiBmb3JlaWduIGtleSwgdGhlIHJlZmVycmVkLXRvCiAgICAgICAgY29sdW1uIGlzIHRoZSBvbmUgdGhhdCdzIGtlcHQuICBXaGVuIGNvbHVtbnMgYXJlIG9taXR0ZWQgYmFzZWQgb24KICAgICAgICBXSEVSRSBlcXVpdmFsZW5jZSwgdGhlIGZpcnN0IGNvbHVtbiBpbiB0aGUgY29sdW1ucyBjbGF1c2UgaXMgdGhlCiAgICAgICAgb25lIHRoYXQncyBrZXB0LgoKICAgICAgICA6cGFyYW0gb25seV9zeW5vbnltczogd2hlbiBUcnVlLCBsaW1pdCB0aGUgcmVtb3ZhbCBvZiBjb2x1bW5zCiAgICAgICAgIHRvIHRob3NlIHdoaWNoIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXF1aXZhbGVudC4gICBPdGhlcndpc2UsCiAgICAgICAgIGFsbCBjb2x1bW5zIHRoYXQgYXJlIGVxdWl2YWxlbnQgdG8gYW5vdGhlciBhcmUgcmVtb3ZlZC4KCiAgICAgICAg2g1vbmx5X3N5bm9ueW1zKQbaEXdpdGhfb25seV9jb2x1bW5zckIBAABy5QIAAHK4AgAAcoMAAAByswIAACkDcksAAAByzQAAAHL9AgAAcwMAAAAgICByOwAAAHJCAQAAehVTZWxlY3QucmVkdWNlX2NvbHVtbnOiDQAAc2UAAACAAPAuABAU1w8l0g8l2AwiiEfUDCLYEBTUECLwAwQNDvAGABMX1BIj0BElrQWoZKxu0Sg91Cg90RE98AcEDQ7wAAQNDvAABA0O4B4r8AUEDQ7wAAQNDvEDBhAK9AAGEArwAAYJCnJFAAAAYwIAAAAAAAAAAAAAAAUAAAADAAAA8/wAAACXAHwAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKYAAACrAAAAAAAAAAAAAQBnAH0CfAFEAF1bfQN0AwAAAAAAAAAAAAB8A6YBAACrAQAAAAAAAAAAfQN0BQAAAAAAAAAAAAB8A3QGAAAAAAAAAAAAAKYCAACrAgAAAAAAAAAAciB8A6AEAAAAAAAAAAAAAAAAAAAAAAAAAAB0CgAAAAAAAAAAAABqBgAAAAAAAAAArAGmAQAAqwEAAAAAAAAAAH0DfAKgBwAAAAAAAAAAAAAAAAAAAAAAAAAAfAOmAQAAqwEAAAAAAAAAAAEAjFx8AnwAXwgAAAAAAAAAAGQCUwApA2F2CgAAUmV0dXJuIGEgbmV3IDpmdW5jOmBfZXhwcmVzc2lvbi5zZWxlY3RgIGNvbnN0cnVjdCB3aXRoIGl0cyBjb2x1bW5zCiAgICAgICAgY2xhdXNlIHJlcGxhY2VkIHdpdGggdGhlIGdpdmVuIGNvbHVtbnMuCgogICAgICAgIFRoaXMgbWV0aG9kIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byBhcyBpZiB0aGUgb3JpZ2luYWwKICAgICAgICA6ZnVuYzpgX2V4cHJlc3Npb24uc2VsZWN0YCBoYWQgYmVlbiBjYWxsZWQgd2l0aCB0aGUgZ2l2ZW4gY29sdW1ucwogICAgICAgIGNsYXVzZS4gICBJLmUuIGEgc3RhdGVtZW50OjoKCiAgICAgICAgICAgIHMgPSBzZWxlY3QoW3RhYmxlMS5jLmEsIHRhYmxlMS5jLmJdKQogICAgICAgICAgICBzID0gcy53aXRoX29ubHlfY29sdW1ucyhbdGFibGUxLmMuYl0pCgogICAgICAgIHNob3VsZCBiZSBleGFjdGx5IGVxdWl2YWxlbnQgdG86OgoKICAgICAgICAgICAgcyA9IHNlbGVjdChbdGFibGUxLmMuYl0pCgogICAgICAgIFRoaXMgbWVhbnMgdGhhdCBGUk9NIGNsYXVzZXMgd2hpY2ggYXJlIG9ubHkgZGVyaXZlZAogICAgICAgIGZyb20gdGhlIGNvbHVtbiBsaXN0IHdpbGwgYmUgZGlzY2FyZGVkIGlmIHRoZSBuZXcgY29sdW1uCiAgICAgICAgbGlzdCBubyBsb25nZXIgY29udGFpbnMgdGhhdCBGUk9NOjoKCiAgICAgICAgICAgID4+PiB0YWJsZTEgPSB0YWJsZSgndDEnLCBjb2x1bW4oJ2EnKSwgY29sdW1uKCdiJykpCiAgICAgICAgICAgID4+PiB0YWJsZTIgPSB0YWJsZSgndDInLCBjb2x1bW4oJ2EnKSwgY29sdW1uKCdiJykpCiAgICAgICAgICAgID4+PiBzMSA9IHNlbGVjdChbdGFibGUxLmMuYSwgdGFibGUyLmMuYl0pCiAgICAgICAgICAgID4+PiBwcmludChzMSkKICAgICAgICAgICAgU0VMRUNUIHQxLmEsIHQyLmIgRlJPTSB0MSwgdDIKICAgICAgICAgICAgPj4+IHMyID0gczEud2l0aF9vbmx5X2NvbHVtbnMoW3RhYmxlMi5jLmJdKQogICAgICAgICAgICA+Pj4gcHJpbnQoczIpCiAgICAgICAgICAgIFNFTEVDVCB0Mi5iIEZST00gdDEKCiAgICAgICAgVGhlIHByZWZlcnJlZCB3YXkgdG8gbWFpbnRhaW4gYSBzcGVjaWZpYyBGUk9NIGNsYXVzZQogICAgICAgIGluIHRoZSBjb25zdHJ1Y3QsIGFzc3VtaW5nIGl0IHdvbid0IGJlIHJlcHJlc2VudGVkIGFueXdoZXJlCiAgICAgICAgZWxzZSAoaS5lLiBub3QgaW4gdGhlIFdIRVJFIGNsYXVzZSwgZXRjLikgaXMgdG8gc2V0IGl0IHVzaW5nCiAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC5zZWxlY3RfZnJvbWA6OgoKICAgICAgICAgICAgPj4+IHMxID0gc2VsZWN0KFt0YWJsZTEuYy5hLCB0YWJsZTIuYy5iXSkuXAogICAgICAgICAgICAuLi4gICAgICAgICBzZWxlY3RfZnJvbSh0YWJsZTEuam9pbih0YWJsZTIsCiAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgdGFibGUxLmMuYT09dGFibGUyLmMuYSkpCiAgICAgICAgICAgID4+PiBzMiA9IHMxLndpdGhfb25seV9jb2x1bW5zKFt0YWJsZTIuYy5iXSkKICAgICAgICAgICAgPj4+IHByaW50KHMyKQogICAgICAgICAgICBTRUxFQ1QgdDIuYiBGUk9NIHQxIEpPSU4gdDIgT04gdDEuYT10Mi5hCgogICAgICAgIENhcmUgc2hvdWxkIGFsc28gYmUgdGFrZW4gdG8gdXNlIHRoZSBjb3JyZWN0IHNldCBvZiBjb2x1bW4gb2JqZWN0cwogICAgICAgIHBhc3NlZCB0byA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LndpdGhfb25seV9jb2x1bW5zYC4KICAgICAgICBTaW5jZSB0aGUgbWV0aG9kIGlzCiAgICAgICAgZXNzZW50aWFsbHkgZXF1aXZhbGVudCB0byBjYWxsaW5nIHRoZSA6ZnVuYzpgX2V4cHJlc3Npb24uc2VsZWN0YAogICAgICAgIGNvbnN0cnVjdCBpbiB0aGUgZmlyc3QgcGxhY2Ugd2l0aCB0aGUgZ2l2ZW4gY29sdW1ucywgdGhlIGNvbHVtbnMgcGFzc2VkCiAgICAgICAgdG8gOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC53aXRoX29ubHlfY29sdW1uc2AKICAgICAgICBzaG91bGQgdXN1YWxseSBiZSBhIHN1YnNldCBvZgogICAgICAgIHRob3NlIHdoaWNoIHdlcmUgcGFzc2VkIHRvIHRoZSA6ZnVuYzpgX2V4cHJlc3Npb24uc2VsZWN0YAogICAgICAgIGNvbnN0cnVjdCwgbm90IHRob3NlIHdoaWNoIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgYGAuY2BgIGNvbGxlY3Rpb24gb2YKICAgICAgICB0aGF0IDpmdW5jOmBfZXhwcmVzc2lvbi5zZWxlY3RgLiAgVGhhdCBpczo6CgogICAgICAgICAgICBzID0gc2VsZWN0KFt0YWJsZTEuYy5hLCB0YWJsZTEuYy5iXSkuc2VsZWN0X2Zyb20odGFibGUxKQogICAgICAgICAgICBzID0gcy53aXRoX29ubHlfY29sdW1ucyhbdGFibGUxLmMuYl0pCgogICAgICAgIGFuZCAqKm5vdCoqOjoKCiAgICAgICAgICAgICMgdXN1YWxseSBpbmNvcnJlY3QKICAgICAgICAgICAgcyA9IHMud2l0aF9vbmx5X2NvbHVtbnMoW3MuYy5iXSkKCiAgICAgICAgVGhlIGxhdHRlciB3b3VsZCBwcm9kdWNlIHRoZSBTUUw6OgoKICAgICAgICAgICAgU0VMRUNUIGIKICAgICAgICAgICAgRlJPTSAoU0VMRUNUIHQxLmEgQVMgYSwgdDEuYiBBUyBiCiAgICAgICAgICAgIEZST00gdDEpLCB0MQoKICAgICAgICBTaW5jZSB0aGUgOmZ1bmM6YF9leHByZXNzaW9uLnNlbGVjdGAgY29uc3RydWN0IGlzIGVzc2VudGlhbGx5CiAgICAgICAgYmVpbmcgYXNrZWQgdG8gc2VsZWN0IGJvdGggZnJvbSBgYHRhYmxlMWBgIGFzIHdlbGwgYXMgaXRzZWxmLgoKICAgICAgICByrQEAAE4pCXIBAQAAchkAAAByMgAAAHI6AgAAciUBAAByBgAAAHK2AgAAcn8BAABytQIAACkEcksAAABynwAAANoCcmNy7AAAAHMEAAAAICAgIHI7AAAAcv4CAAB6GFNlbGVjdC53aXRoX29ubHlfY29sdW1uc8ENAABzfwAAAIAA8EwCAAkN1wgc0ggc0Qge1Age0Age2A0PiALYERjwAAQJGfAABAkZiEHdECyoUdEQL9QQL4hB3Q8ZmCGdXNEPKtQPKvAAAQ092BQVl0ySTK0Z1Ck7kEzRFDzUFDyQAdgMDo9JikmQYYlMjEyITIhM2BweiATUCBnQCBnQCBlyRQAAAGMCAAAAAAAAAAAAAAADAAAAAwAAAPMwAAAAlwB8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAAQBkAVMAKQJ6r1JldHVybiBhIG5ldyA6ZnVuYzpgX2V4cHJlc3Npb24uc2VsZWN0YCBjb25zdHJ1Y3Qgd2l0aAogICAgICAgIHRoZSBnaXZlbiBleHByZXNzaW9uIGFkZGVkIHRvCiAgICAgICAgaXRzIFdIRVJFIGNsYXVzZSwgam9pbmVkIHRvIHRoZSBleGlzdGluZyBjbGF1c2UgdmlhIEFORCwgaWYgYW55LgoKICAgICAgICBOKQHaEmFwcGVuZF93aGVyZWNsYXVzZakCcksAAABypAAAAHMCAAAAICByOwAAANoFd2hlcmV6DFNlbGVjdC53aGVyZRAOAABzHgAAAIAA8BAACQ3XCB/SCB+gC9EILNQILNAILNAILNAILHJFAAAAYwIAAAAAAAAAAAAAAAMAAAADAAAA8zAAAACXAHwAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwBpgEAAKsBAAAAAAAAAAABAGQBUwApAnqwUmV0dXJuIGEgbmV3IDpmdW5jOmBfZXhwcmVzc2lvbi5zZWxlY3RgIGNvbnN0cnVjdCB3aXRoCiAgICAgICAgdGhlIGdpdmVuIGV4cHJlc3Npb24gYWRkZWQgdG8KICAgICAgICBpdHMgSEFWSU5HIGNsYXVzZSwgam9pbmVkIHRvIHRoZSBleGlzdGluZyBjbGF1c2UgdmlhIEFORCwgaWYgYW55LgoKICAgICAgICBOKQHaDWFwcGVuZF9oYXZpbmepAnJLAAAAcrsCAABzAgAAACAgcjsAAAByuwIAAHoNU2VsZWN0LmhhdmluZxoOAABzHgAAAIAA8A4ACQ3XCBrSCBqYNtEIItQIItAIItAIItAIInJFAAAAYwEAAAAAAAAAAAAAAAQAAAAHAAAA85gAAACXAHwBckBkAYQAfAFEAKYAAACrAAAAAAAAAAAAfQF0AQAAAAAAAAAAAAB8AGoBAAAAAAAAAAB0BAAAAAAAAAAAAACmAgAAqwIAAAAAAAAAAHIRfABqAQAAAAAAAAAAfAF6AAAAfABfAQAAAAAAAAAAZANTAHwBfABfAQAAAAAAAAAAZANTAGQCfABfAQAAAAAAAAAAZANTACkEYRsBAABSZXR1cm4gYSBuZXcgOmZ1bmM6YF9leHByZXNzaW9uLnNlbGVjdGAgY29uc3RydWN0IHdoaWNoCiAgICAgICAgd2lsbCBhcHBseSBESVNUSU5DVCB0byBpdHMgY29sdW1ucyBjbGF1c2UuCgogICAgICAgIDpwYXJhbSBcKmV4cHI6IG9wdGlvbmFsIGNvbHVtbiBleHByZXNzaW9ucy4gIFdoZW4gcHJlc2VudCwKICAgICAgICAgdGhlIFBvc3RncmVTUUwgZGlhbGVjdCB3aWxsIHJlbmRlciBhIGBgRElTVElOQ1QgT04gKDxleHByZXNzaW9ucz4+KWBgCiAgICAgICAgIGNvbnN0cnVjdC4KCiAgICAgICAgYwEAAAAAAAAAAAAAAAUAAAATAAAA8ywAAACXAGcAfABdEX0BdAEAAAAAAAAAAAAAfAGmAQAAqwEAAAAAAAAAAJECjBJTAHJRAAAAchsAAAByrgIAAHMCAAAAICByOwAAAHKAAAAAeiNTZWxlY3QuZGlzdGluY3QuPGxvY2Fscz4uPGxpc3Rjb21wPi4OAABzIQAAAIAA0BNB0BNB0BNBsHHVFC+wAdEUMtQUMtATQdATQdATQXJFAAAAVE4pA3IyAAAAcrECAAByngAAACkCcksAAABybgAAAHMCAAAAICByOwAAAHK6AgAAeg9TZWxlY3QuZGlzdGluY3QjDgAAc1sAAACAAPAUAAwQ8AAHCSLYE0HQE0G4RNATQdETQdQTQYhE3Q8ZmCScLq0k0Q8v1A8v8AADDSbYISWkHrAk0SE2kASUDpAOkA7gISWQBJQOkA6QDuAdIYhEjE6ITohOckUAAABjAgAAAAAAAAAAAAAAAwAAAAMAAADzMAAAAJcAfACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAGmAQAAqwEAAAAAAAAAAAEAZAFTACkCYSAFAABSZXR1cm4gYSBuZXcgOmZ1bmM6YF9leHByZXNzaW9uLnNlbGVjdGAgY29uc3RydWN0IHdpdGggdGhlCiAgICAgICAgZ2l2ZW4gRlJPTSBleHByZXNzaW9uKHMpCiAgICAgICAgbWVyZ2VkIGludG8gaXRzIGxpc3Qgb2YgRlJPTSBvYmplY3RzLgoKICAgICAgICBFLmcuOjoKCiAgICAgICAgICAgIHRhYmxlMSA9IHRhYmxlKCd0MScsIGNvbHVtbignYScpKQogICAgICAgICAgICB0YWJsZTIgPSB0YWJsZSgndDInLCBjb2x1bW4oJ2InKSkKICAgICAgICAgICAgcyA9IHNlbGVjdChbdGFibGUxLmMuYV0pLlwKICAgICAgICAgICAgICAgIHNlbGVjdF9mcm9tKAogICAgICAgICAgICAgICAgICAgIHRhYmxlMS5qb2luKHRhYmxlMiwgdGFibGUxLmMuYT09dGFibGUyLmMuYikKICAgICAgICAgICAgICAgICkKCiAgICAgICAgVGhlICJmcm9tIiBsaXN0IGlzIGEgdW5pcXVlIHNldCBvbiB0aGUgaWRlbnRpdHkgb2YgZWFjaCBlbGVtZW50LAogICAgICAgIHNvIGFkZGluZyBhbiBhbHJlYWR5IHByZXNlbnQgOmNsYXNzOmBfc2NoZW1hLlRhYmxlYAogICAgICAgIG9yIG90aGVyIHNlbGVjdGFibGUKICAgICAgICB3aWxsIGhhdmUgbm8gZWZmZWN0LiAgIFBhc3NpbmcgYSA6Y2xhc3M6YF9leHByZXNzaW9uLkpvaW5gIHRoYXQgcmVmZXJzCiAgICAgICAgdG8gYW4gYWxyZWFkeSBwcmVzZW50IDpjbGFzczpgX3NjaGVtYS5UYWJsZWAKICAgICAgICBvciBvdGhlciBzZWxlY3RhYmxlIHdpbGwgaGF2ZQogICAgICAgIHRoZSBlZmZlY3Qgb2YgY29uY2VhbGluZyB0aGUgcHJlc2VuY2Ugb2YgdGhhdCBzZWxlY3RhYmxlIGFzCiAgICAgICAgYW4gaW5kaXZpZHVhbCBlbGVtZW50IGluIHRoZSByZW5kZXJlZCBGUk9NIGxpc3QsIGluc3RlYWQKICAgICAgICByZW5kZXJpbmcgaXQgaW50byBhIEpPSU4gY2xhdXNlLgoKICAgICAgICBXaGlsZSB0aGUgdHlwaWNhbCBwdXJwb3NlIG9mIDptZXRoOmBfZXhwcmVzc2lvbi5TZWxlY3Quc2VsZWN0X2Zyb21gCiAgICAgICAgaXMgdG8KICAgICAgICByZXBsYWNlIHRoZSBkZWZhdWx0LCBkZXJpdmVkIEZST00gY2xhdXNlIHdpdGggYSBqb2luLCBpdCBjYW4KICAgICAgICBhbHNvIGJlIGNhbGxlZCB3aXRoIGluZGl2aWR1YWwgdGFibGUgZWxlbWVudHMsIG11bHRpcGxlIHRpbWVzCiAgICAgICAgaWYgZGVzaXJlZCwgaW4gdGhlIGNhc2UgdGhhdCB0aGUgRlJPTSBjbGF1c2UgY2Fubm90IGJlIGZ1bGx5CiAgICAgICAgZGVyaXZlZCBmcm9tIHRoZSBjb2x1bW5zIGNsYXVzZTo6CgogICAgICAgICAgICBzZWxlY3QoW2Z1bmMuY291bnQoJyonKV0pLnNlbGVjdF9mcm9tKHRhYmxlMSkKCiAgICAgICAgTikB2gthcHBlbmRfZnJvbXLCAAAAcwIAAAAgIHI7AAAA2gtzZWxlY3RfZnJvbXoSU2VsZWN0LnNlbGVjdF9mcm9tNg4AAHMfAAAAgADwRgEACQ3XCBjSCBiYGtEIJNQIJNAIJNAIJNAIJHJFAAAAYwEAAAAAAAAAAAAAAAQAAAAHAAAA86YAAACXAGQBfABfAAAAAAAAAAAAfAFyEXwBZAIZAAAAAAAAAAAAgAlkBHwAXwEAAAAAAAAAAGQDUwB0BQAAAAAAAAAAAAB8AGoBAAAAAAAAAACmAQAAqwEAAAAAAAAAAKADAAAAAAAAAAAAAAAAAAAAAAAAAABkBYQAfAFEAKYAAACrAAAAAAAAAAAApgEAAKsBAAAAAAAAAAB8AF8BAAAAAAAAAABkA1MAKQZhVQgAAFJldHVybiBhIG5ldyA6Y2xhc3M6YF9leHByZXNzaW9uLlNlbGVjdGAKICAgICAgICB3aGljaCB3aWxsIGNvcnJlbGF0ZSB0aGUgZ2l2ZW4gRlJPTQogICAgICAgIGNsYXVzZXMgdG8gdGhhdCBvZiBhbiBlbmNsb3NpbmcgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgLgoKICAgICAgICBDYWxsaW5nIHRoaXMgbWV0aG9kIHR1cm5zIG9mZiB0aGUgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgIG9iamVjdCdzCiAgICAgICAgZGVmYXVsdCBiZWhhdmlvciBvZiAiYXV0by1jb3JyZWxhdGlvbiIuICBOb3JtYWxseSwgRlJPTSBlbGVtZW50cwogICAgICAgIHdoaWNoIGFwcGVhciBpbiBhIDpjbGFzczpgX2V4cHJlc3Npb24uU2VsZWN0YAogICAgICAgIHRoYXQgZW5jbG9zZXMgdGhpcyBvbmUgdmlhCiAgICAgICAgaXRzIDp0ZXJtOmBXSEVSRSBjbGF1c2VgLCBPUkRFUiBCWSwgSEFWSU5HIG9yCiAgICAgICAgOnRlcm06YGNvbHVtbnMgY2xhdXNlYCB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGlzCiAgICAgICAgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgCiAgICAgICAgb2JqZWN0J3MgOnRlcm06YEZST00gY2xhdXNlYC4KICAgICAgICBTZXR0aW5nIGFuIGV4cGxpY2l0IGNvcnJlbGF0aW9uIGNvbGxlY3Rpb24gdXNpbmcgdGhlCiAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC5jb3JyZWxhdGVgCiAgICAgICAgbWV0aG9kIHByb3ZpZGVzIGEgZml4ZWQgbGlzdCBvZiBGUk9NIG9iamVjdHMKICAgICAgICB0aGF0IGNhbiBwb3RlbnRpYWxseSB0YWtlIHBsYWNlIGluIHRoaXMgcHJvY2Vzcy4KCiAgICAgICAgV2hlbiA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LmNvcnJlbGF0ZWAKICAgICAgICBpcyB1c2VkIHRvIGFwcGx5IHNwZWNpZmljIEZST00gY2xhdXNlcwogICAgICAgIGZvciBjb3JyZWxhdGlvbiwgdGhlIEZST00gZWxlbWVudHMgYmVjb21lIGNhbmRpZGF0ZXMgZm9yCiAgICAgICAgY29ycmVsYXRpb24gcmVnYXJkbGVzcyBvZiBob3cgZGVlcGx5IG5lc3RlZCB0aGlzCiAgICAgICAgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgCiAgICAgICAgb2JqZWN0IGlzLCByZWxhdGl2ZSB0byBhbiBlbmNsb3NpbmcgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgCiAgICAgICAgd2hpY2ggcmVmZXJzIHRvCiAgICAgICAgdGhlIHNhbWUgRlJPTSBvYmplY3QuICBUaGlzIGlzIGluIGNvbnRyYXN0IHRvIHRoZSBiZWhhdmlvciBvZgogICAgICAgICJhdXRvLWNvcnJlbGF0aW9uIiB3aGljaCBvbmx5IGNvcnJlbGF0ZXMgdG8gYW4gaW1tZWRpYXRlIGVuY2xvc2luZwogICAgICAgIDpjbGFzczpgX2V4cHJlc3Npb24uU2VsZWN0YC4KICAgICAgICBNdWx0aS1sZXZlbCBjb3JyZWxhdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGxpbmsKICAgICAgICBiZXR3ZWVuIGVuY2xvc2VkIGFuZCBlbmNsb3NpbmcgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgCiAgICAgICAgaXMgYWx3YXlzIHZpYQogICAgICAgIGF0IGxlYXN0IG9uZSBXSEVSRS9PUkRFUiBCWS9IQVZJTkcvY29sdW1ucyBjbGF1c2UgaW4gb3JkZXIgZm9yCiAgICAgICAgY29ycmVsYXRpb24gdG8gdGFrZSBwbGFjZS4KCiAgICAgICAgSWYgYGBOb25lYGAgaXMgcGFzc2VkLCB0aGUgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RgCiAgICAgICAgb2JqZWN0IHdpbGwgY29ycmVsYXRlCiAgICAgICAgbm9uZSBvZiBpdHMgRlJPTSBlbnRyaWVzLCBhbmQgYWxsIHdpbGwgcmVuZGVyIHVuY29uZGl0aW9uYWxseQogICAgICAgIGluIHRoZSBsb2NhbCBGUk9NIGNsYXVzZS4KCiAgICAgICAgOnBhcmFtIFwqZnJvbWNsYXVzZXM6IGEgbGlzdCBvZiBvbmUgb3IgbW9yZQogICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkZyb21DbGF1c2VgCiAgICAgICAgIGNvbnN0cnVjdHMsIG9yIG90aGVyIGNvbXBhdGlibGUgY29uc3RydWN0cyAoaS5lLiBPUk0tbWFwcGVkCiAgICAgICAgIGNsYXNzZXMpIHRvIGJlY29tZSBwYXJ0IG9mIHRoZSBjb3JyZWxhdGUgY29sbGVjdGlvbi4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LmNvcnJlbGF0ZV9leGNlcHRgCgogICAgICAgICAgICA6cmVmOmBjb3JyZWxhdGVkX3N1YnF1ZXJpZXNgCgogICAgICAgIEZyAgAAAE5yUQAAAGMBAAAAAAAAAAAAAAAEAAAAMwAAAPM0AAAASwABAJcAfABdE30BdAEAAAAAAAAAAAAAfAGmAQAAqwEAAAAAAAAAAFYAlwEBAIwUZABTAHI+AAAAcrACAAByhQEAAHMCAAAAICByOwAAAHI8AQAAeiNTZWxlY3QuY29ycmVsYXRlLjxsb2NhbHM+LjxnZW5leHByPpQOAABzPAAAAOgA6ACAAPAAAjkO8AACOQ7YKivVECKgMdEQJdQQJfADAjkO8AACOQ7wAAI5DvAAAjkO8AACOQ7wAAI5DnJFAAAAKQRydQIAAHLSAgAActsAAABy6AEAAKkCcksAAADaC2Zyb21jbGF1c2VzcwIAAAAgIHI7AAAAcpIBAAB6EFNlbGVjdC5jb3JyZWxhdGVbDgAAc2oAAACAAPBqAQAgJYgE1Agc2AsW8AAFCQ6YO6BxnD7QGzHYHiCIRIxPiE+IT+UeIaAkpC/RHjLUHjLXHjjSHjjwAAI5DvAAAjkO2C868AMCOQ7xAAI5DvQAAjkO8QACHw70AAIfDohEjE+IT4hPckUAAABjAQAAAAAAAAAAAAAABAAAAAcAAADzqgAAAJcAZAF8AF8AAAAAAAAAAAB8AXIRfAFkAhkAAAAAAAAAAACACWQEfABfAQAAAAAAAAAAZANTAHQFAAAAAAAAAAAAAHwAagEAAAAAAAAAAHABZASmAQAAqwEAAAAAAAAAAKADAAAAAAAAAAAAAAAAAAAAAAAAAABkBYQAfAFEAKYAAACrAAAAAAAAAAAApgEAAKsBAAAAAAAAAAB8AF8BAAAAAAAAAABkA1MAKQZh4AMAAFJldHVybiBhIG5ldyA6Y2xhc3M6YF9leHByZXNzaW9uLlNlbGVjdGAKICAgICAgICB3aGljaCB3aWxsIG9taXQgdGhlIGdpdmVuIEZST00KICAgICAgICBjbGF1c2VzIGZyb20gdGhlIGF1dG8tY29ycmVsYXRpb24gcHJvY2Vzcy4KCiAgICAgICAgQ2FsbGluZyA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LmNvcnJlbGF0ZV9leGNlcHRgIHR1cm5zIG9mZiB0aGUKICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLlNlbGVjdGAgb2JqZWN0J3MgZGVmYXVsdCBiZWhhdmlvciBvZgogICAgICAgICJhdXRvLWNvcnJlbGF0aW9uIiBmb3IgdGhlIGdpdmVuIEZST00gZWxlbWVudHMuICBBbiBlbGVtZW50CiAgICAgICAgc3BlY2lmaWVkIGhlcmUgd2lsbCB1bmNvbmRpdGlvbmFsbHkgYXBwZWFyIGluIHRoZSBGUk9NIGxpc3QsIHdoaWxlCiAgICAgICAgYWxsIG90aGVyIEZST00gZWxlbWVudHMgcmVtYWluIHN1YmplY3QgdG8gbm9ybWFsIGF1dG8tY29ycmVsYXRpb24KICAgICAgICBiZWhhdmlvcnMuCgogICAgICAgIElmIGBgTm9uZWBgIGlzIHBhc3NlZCwgdGhlIDpjbGFzczpgX2V4cHJlc3Npb24uU2VsZWN0YAogICAgICAgIG9iamVjdCB3aWxsIGNvcnJlbGF0ZQogICAgICAgIGFsbCBvZiBpdHMgRlJPTSBlbnRyaWVzLgoKICAgICAgICA6cGFyYW0gXCpmcm9tY2xhdXNlczogYSBsaXN0IG9mIG9uZSBvciBtb3JlCiAgICAgICAgIDpjbGFzczpgX2V4cHJlc3Npb24uRnJvbUNsYXVzZWAKICAgICAgICAgY29uc3RydWN0cywgb3Igb3RoZXIgY29tcGF0aWJsZSBjb25zdHJ1Y3RzIChpLmUuIE9STS1tYXBwZWQKICAgICAgICAgY2xhc3NlcykgdG8gYmVjb21lIHBhcnQgb2YgdGhlIGNvcnJlbGF0ZS1leGNlcHRpb24gY29sbGVjdGlvbi4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LmNvcnJlbGF0ZWAKCiAgICAgICAgICAgIDpyZWY6YGNvcnJlbGF0ZWRfc3VicXVlcmllc2AKCiAgICAgICAgRnICAAAATnJRAAAAYwEAAAAAAAAAAAAAAAQAAAAzAAAA8zQAAABLAAEAlwB8AF0TfQF0AQAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAVgCXAQEAjBRkAFMAcj4AAABysAIAAHKFAQAAcwIAAAAgIHI7AAAAcjwBAAB6KlNlbGVjdC5jb3JyZWxhdGVfZXhjZXB0Ljxsb2NhbHM+LjxnZW5leHByProOAABzRAAAAOgA6ACAAPAAAk0BDvAAAk0BDtgqK9UQIqAx0RAl1BAl8AMCTQEO8AACTQEO8AACTQEO8AACTQEO8AACTQEO8AACTQEOckUAAAApBHJ1AgAAcs8CAABy2wAAAHLoAQAAcg8DAABzAgAAACAgcjsAAADaEGNvcnJlbGF0ZV9leGNlcHR6F1NlbGVjdC5jb3JyZWxhdGVfZXhjZXB0mA4AAHN6AAAAgADwPAAgJYgE1Agc2AsW8AAFCQ6YO6BxnD7QGzHYJSeIRNQMItAMItAMIuUlKKgU1Ck/0ClFwDLRJUbUJUbXJUzSJUzwAAJNAQ7wAAJNAQ7YLzrwAwJNAQ7xAAJNAQ70AAJNAQ7xAAImDvQAAiYOiETUDCLQDCLQDCJyRQAAAGMCAAAAAAAAAAAAAAAEAAAAAwAAAPOAAAAAlwBkAXwAXwAAAAAAAAAAAHQDAAAAAAAAAAAAAHwAagIAAAAAAAAAAKYBAACrAQAAAAAAAAAAoAMAAAAAAAAAAAAAAAAAAAAAAAAAAGQChAB8AUQApgAAAKsAAAAAAAAAAACmAQAAqwEAAAAAAAAAAHwAXwIAAAAAAAAAAGQDUwApBGEYAQAAQXBwZW5kIHRoZSBnaXZlbiBjb3JyZWxhdGlvbiBleHByZXNzaW9uIHRvIHRoaXMKICAgICAgICA6ZnVuYzpgX2V4cHJlc3Npb24uc2VsZWN0YCBjb25zdHJ1Y3QuCgogICAgICAgIFRoaXMgaXMgYW4gKippbi1wbGFjZSoqIG11dGF0aW9uIG1ldGhvZDsgdGhlCiAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC5jb3JyZWxhdGVgIG1ldGhvZCBpcyBwcmVmZXJyZWQsCiAgICAgICAgYXMgaXQgcHJvdmlkZXMgc3RhbmRhcmQgOnRlcm06YG1ldGhvZCBjaGFpbmluZ2AuCgogICAgICAgIEZjAQAAAAAAAAAAAAAABAAAADMAAADzNAAAAEsAAQCXAHwAXRN9AXQBAAAAAAAAAAAAAHwBpgEAAKsBAAAAAAAAAABWAJcBAQCMFGQAUwByPgAAAHKwAgAAcoUBAABzAgAAACAgcjsAAAByPAEAAHosU2VsZWN0LmFwcGVuZF9jb3JyZWxhdGlvbi48bG9jYWxzPi48Z2VuZXhwcj7JDgAAczwAAADoAOgAgADwAAI1CvAAAjUK2CYn1QwemHHRDCHUDCHwAwI1CvAAAjUK8AACNQrwAAI1CvAAAjUK8AACNQpyRQAAAE4pBHJ1AgAActsAAABy0gIAAHLoAQAAcsIAAABzAgAAACAgcjsAAADaEmFwcGVuZF9jb3JyZWxhdGlvbnoZU2VsZWN0LmFwcGVuZF9jb3JyZWxhdGlvbr4OAABzTQAAAIAA8BQAICWIBNQIHN0aHZhknG/RGi7UGi7XGjTSGjTwAAI1CvAAAjUK2Cs18AMCNQrxAAI1CvQAAjUK8QACGwr0AAIbCogEjA+ID4gPckUAAABjAgAAAAAAAAAAAAAABAAAAAMAAADz1gAAAJcAfACgAAAAAAAAAAAAAAAAAAAAAAAAAAAApgAAAKsAAAAAAAAAAAABAHQDAAAAAAAAAAAAAHwBpgEAAKsBAAAAAAAAAAB9AXQFAAAAAAAAAAAAAHwBdAYAAAAAAAAAAAAApgIAAKsCAAAAAAAAAAByIHwBoAQAAAAAAAAAAAAAAAAAAAAAAAAAAHQKAAAAAAAAAAAAAGoGAAAAAAAAAACsAaYBAACrAQAAAAAAAAAAfQF8AGoHAAAAAAAAAAB8AWcBegAAAHwAXwcAAAAAAAAAAGQCUwApA2EtAgAAQXBwZW5kIHRoZSBnaXZlbiBjb2x1bW4gZXhwcmVzc2lvbiB0byB0aGUgY29sdW1ucyBjbGF1c2Ugb2YgdGhpcwogICAgICAgIDpmdW5jOmBfZXhwcmVzc2lvbi5zZWxlY3RgIGNvbnN0cnVjdC4KCiAgICAgICAgRS5nLjo6CgogICAgICAgICAgICBteV9zZWxlY3QuYXBwZW5kX2NvbHVtbihzb21lX3RhYmxlLmMubmV3X2NvbHVtbikKCiAgICAgICAgVGhpcyBpcyBhbiAqKmluLXBsYWNlKiogbXV0YXRpb24gbWV0aG9kOyB0aGUKICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LmNvbHVtbmAgbWV0aG9kIGlzIHByZWZlcnJlZCwKICAgICAgICBhcyBpdCBwcm92aWRlcyBzdGFuZGFyZCA6dGVybTpgbWV0aG9kIGNoYWluaW5nYC4KCiAgICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0LndpdGhfb25seV9jb2x1bW5zYAogICAgICAgIGZvciBndWlkZWxpbmVzIG9uIGFkZGluZyAvcmVwbGFjaW5nIHRoZSBjb2x1bW5zIG9mIGEKICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLlNlbGVjdGAgb2JqZWN0LgoKICAgICAgICByrQEAAE4pCHIBAQAAchkAAAByMgAAAHI6AgAAciUBAAByBgAAAHK2AgAAcrUCAAByEQEAAHMCAAAAICByOwAAAHILAgAAehRTZWxlY3QuYXBwZW5kX2NvbHVtbs0OAABzZwAAAIAA8CIACQ3XCBzSCBzRCB7UCB7QCB7dES2oZtERNdQRNYgG5QsVkGadbNELK9QLK/AAAQlDAdgVG9cVJtIVJq151C9B0BUm0RVC1BVCiEbgHCDUHC2wFrAI0Rw4iATUCBnQCBnQCBlyRQAAAGMCAAAAAAAAAAAAAAADAAAAAwAAAPNEAAAAlwB0AQAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAfQF8AGoBAAAAAAAAAAB8AWYBegAAAHwAXwEAAAAAAAAAAGQBUwApAmEkAQAAQXBwZW5kIHRoZSBnaXZlbiBjb2x1bW5zIGNsYXVzZSBwcmVmaXggZXhwcmVzc2lvbiB0byB0aGlzCiAgICAgICAgOmZ1bmM6YF9leHByZXNzaW9uLnNlbGVjdGAgY29uc3RydWN0LgoKICAgICAgICBUaGlzIGlzIGFuICoqaW4tcGxhY2UqKiBtdXRhdGlvbiBtZXRob2Q7IHRoZQogICAgICAgIDptZXRoOmBfZXhwcmVzc2lvbi5TZWxlY3QucHJlZml4X3dpdGhgIG1ldGhvZCBpcyBwcmVmZXJyZWQsCiAgICAgICAgYXMgaXQgcHJvdmlkZXMgc3RhbmRhcmQgOnRlcm06YG1ldGhvZCBjaGFpbmluZ2AuCgogICAgICAgIE4pAnIeAAAAcoIAAAApAnJLAAAAcl0AAABzAgAAACAgcjsAAADaDWFwcGVuZF9wcmVmaXh6FFNlbGVjdC5hcHBlbmRfcHJlZml45g4AAHMlAAAAgAD1EgASIqAm0REp1BEpiAbYGR2cHqg2qCnRGTOIBIwOiA6IDnJFAAAAYwIAAAAAAAAAAAAAAAUAAAADAAAA84YAAACXAHwAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKYAAACrAAAAAAAAAAAAAQB0AwAAAAAAAAAAAAB0BQAAAAAAAAAAAABqAwAAAAAAAAAAfABqBAAAAAAAAAAApgEAAKsBAAAAAAAAAAB8AaYCAACrAgAAAAAAAAAAfABfBAAAAAAAAAAAZAFTACkCYWYBAABBcHBlbmQgdGhlIGdpdmVuIGV4cHJlc3Npb24gdG8gdGhpcyA6ZnVuYzpgX2V4cHJlc3Npb24uc2VsZWN0YAogICAgICAgIGNvbnN0cnVjdCdzIFdIRVJFIGNyaXRlcmlvbi4KCiAgICAgICAgVGhlIGV4cHJlc3Npb24gd2lsbCBiZSBqb2luZWQgdG8gZXhpc3RpbmcgV0hFUkUgY3JpdGVyaW9uIHZpYSBBTkQuCgogICAgICAgIFRoaXMgaXMgYW4gKippbi1wbGFjZSoqIG11dGF0aW9uIG1ldGhvZDsgdGhlCiAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC53aGVyZWAgbWV0aG9kIGlzIHByZWZlcnJlZCwKICAgICAgICBhcyBpdCBwcm92aWRlcyBzdGFuZGFyZCA6dGVybTpgbWV0aG9kIGNoYWluaW5nYC4KCiAgICAgICAgTikFcgEBAAByIQAAAHInAAAA2gdfaWZub25lcrgCAAByAwMAAHMCAAAAICByOwAAAHICAwAAehlTZWxlY3QuYXBwZW5kX3doZXJlY2xhdXNl8g4AAHM7AAAAgADwGAAJDdcIHNIIHNEIHtQIHtAIHt0cIKUVpB2odNQvQNEhQdQhQcA70RxP1BxPiATUCBnQCBnQCBlyRQAAAGMCAAAAAAAAAAAAAAAFAAAAAwAAAPOGAAAAlwB8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAAEAdAMAAAAAAAAAAAAAdAUAAAAAAAAAAAAAagMAAAAAAAAAAHwAagQAAAAAAAAAAKYBAACrAQAAAAAAAAAAfAGmAgAAqwIAAAAAAAAAAHwAXwQAAAAAAAAAAGQBUwApAmFpAQAAQXBwZW5kIHRoZSBnaXZlbiBleHByZXNzaW9uIHRvIHRoaXMgOmZ1bmM6YF9leHByZXNzaW9uLnNlbGVjdGAKICAgICAgICBjb25zdHJ1Y3QncyBIQVZJTkcgY3JpdGVyaW9uLgoKICAgICAgICBUaGUgZXhwcmVzc2lvbiB3aWxsIGJlIGpvaW5lZCB0byBleGlzdGluZyBIQVZJTkcgY3JpdGVyaW9uIHZpYSBBTkQuCgogICAgICAgIFRoaXMgaXMgYW4gKippbi1wbGFjZSoqIG11dGF0aW9uIG1ldGhvZDsgdGhlCiAgICAgICAgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC5oYXZpbmdgIG1ldGhvZCBpcyBwcmVmZXJyZWQsCiAgICAgICAgYXMgaXQgcHJvdmlkZXMgc3RhbmRhcmQgOnRlcm06YG1ldGhvZCBjaGFpbmluZ2AuCgogICAgICAgIE4pBXIBAQAAciEAAAByJwAAAHIbAwAAcrkCAAByBwMAAHMCAAAAICByOwAAAHIGAwAAehRTZWxlY3QuYXBwZW5kX2hhdmluZwEPAABzNwAAAIAA8BYACQ3XCBzSCBzRCB7UCB7QCB7dFxudRZxNqCSsLNEcN9QcN7gW0RdA1BdAiASMDIgMiAxyRQAAAGMCAAAAAAAAAAAAAAADAAAAAwAAAPOMAAAAlwB8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAAEAdAMAAAAAAAAAAAAAfAGmAQAAqwEAAAAAAAAAAH0BfABqAgAAAAAAAAAAoAMAAAAAAAAAAAAAAAAAAAAAAAAAAHwBZwGmAQAAqwEAAAAAAAAAAHwAXwIAAAAAAAAAAGQBUwApAmEnAQAAQXBwZW5kIHRoZSBnaXZlbiBGcm9tQ2xhdXNlIGV4cHJlc3Npb24gdG8gdGhpcwogICAgICAgIDpmdW5jOmBfZXhwcmVzc2lvbi5zZWxlY3RgIGNvbnN0cnVjdCdzIEZST00gY2xhdXNlLgoKICAgICAgICBUaGlzIGlzIGFuICoqaW4tcGxhY2UqKiBtdXRhdGlvbiBtZXRob2Q7IHRoZQogICAgICAgIDptZXRoOmBfZXhwcmVzc2lvbi5TZWxlY3Quc2VsZWN0X2Zyb21gIG1ldGhvZCBpcyBwcmVmZXJyZWQsCiAgICAgICAgYXMgaXQgcHJvdmlkZXMgc3RhbmRhcmQgOnRlcm06YG1ldGhvZCBjaGFpbmluZ2AuCgogICAgICAgIE4pBHIBAQAAcjwAAAByswIAAHLoAQAAcsIAAABzAgAAACAgcjsAAAByCwMAAHoSU2VsZWN0LmFwcGVuZF9mcm9tDw8AAHNAAAAAgADwEgAJDdcIHNIIHNEIHtQIHtAIHt0VJ6gK0RUz1BUziArYGR2cHtcZLdIZLah6qGzRGTvUGTuIBIwOiA6IDnJFAAAAYwEAAAAAAAAAAAAAAAYAAAADAAAA8/4AAACHAYcClwB8AGoAAAAAAAAAAAByRXQDAAAAAAAAAAAAAKYAAACrAAAAAAAAAAAAigKIAmYBZAGECIoBiAFmAWQChAh0BQAAAAAAAAAAAABqAwAAAAAAAAAAdAkAAAAAAAAAAAAAfABqBQAAAAAAAAAApgEAAKsBAAAAAAAAAACmAQAAqwEAAAAAAAAAAEQApgAAAKsAAAAAAAAAAABTAGQDhAB0BQAAAAAAAAAAAABqAwAAAAAAAAAAdAkAAAAAAAAAAAAAfABqBQAAAAAAAAAApgEAAKsBAAAAAAAAAACmAQAAqwEAAAAAAAAAAEQApgAAAKsAAAAAAAAAAABTACkETmMBAAAAAAAAAAAAAAADAAAAEwAAAPOAAAAAlQGXAHwAagAAAAAAAAAAAIEHfABqAQAAAAAAAAAAcwRkAHwAZgJTAHwAagAAAAAAAAAAAH0BfAGJAnYAcgh8AGoCAAAAAAAAAAB9AW4ViQKgAwAAAAAAAAAAAAAAAAAAAAAAAAAAfAGmAQAAqwEAAAAAAAAAAAEAfAF8AGYCUwByPgAAACkEcj4BAADaH19yZW5kZXJfbGFiZWxfaW5fY29sdW1uc19jbGF1c2XaCmFub25fbGFiZWxy8wAAACkDcuwAAAByWAAAANoFbmFtZXNzAwAAACAggHI7AAAA2gxuYW1lX2Zvcl9jb2x6MFNlbGVjdC5fY29sdW1uc19wbHVzX25hbWVzLjxsb2NhbHM+Lm5hbWVfZm9yX2NvbCEPAABzTgAAAPiAANgTFJQ40BMjqDHUK0zQEyPYHCCgIZg50BQk4BcYlHiQBNgTF5g1kD2QPdgbHJw8kESQROAUGZdJkkmYZJFPlE+QT9gXG5hRkHeQDnJFAAAAYwEAAAAAAAAAAAAAAAUAAAATAAAA8yYAAACVAZcAZwB8AF0NfQECAIkCfAGmAQAAqwEAAAAAAAAAAJECjA5TAHJRAAAAclEAAAApA3J+AAAAcuwAAAByIwMAAHMDAAAAICCAcjsAAABygAAAAHouU2VsZWN0Ll9jb2x1bW5zX3BsdXNfbmFtZXMuPGxvY2Fscz4uPGxpc3Rjb21wPiwPAABzMQAAAPiAAPAAAxQO8AADFA7wAAMUDuAUFfADABEdkAyYUZEPlA/wAwMUDvAAAxQO8AADFA5yRQAAAGMBAAAAAAAAAAAAAAAEAAAAEwAAAPMWAAAAlwBnAHwAXQZ9AWQAfAFmApECjAdTAHI+AAAAclEAAAByOQEAAHMCAAAAICByOwAAAHKAAAAAei5TZWxlY3QuX2NvbHVtbnNfcGx1c19uYW1lcy48bG9jYWxzPi48bGlzdGNvbXA+MQ8AAHMsAAAAgADwAAMUDvAAAxQO8AADFA7gFBXwAwASFpBxkAnwAwMUDvAAAxQO8AADFA5yRQAAACkGcpEBAABy2wAAAHIsAAAA2gt1bmlxdWVfbGlzdHIgAAAAcrUCAAApA3JLAAAAciMDAAByIgMAAHMDAAAAIEBAcjsAAADaE19jb2x1bW5zX3BsdXNfbmFtZXN6GlNlbGVjdC5fY29sdW1uc19wbHVzX25hbWVzHA8AAHOqAAAA+PiAAOALD4w/8AAWCQ7dFBeRRZRFiEXwBAkNH/AACQ0f8AAJDR/wAAkNH/AACQ0f8BYDFA7wAAMUDvAAAxQO8AADFA7lGR3UGSnVKju4RNQ8TdEqTtQqTtEZT9QZT/AFAxQO8QADFA70AAMUDvAAAw0O8AoDFA7wAAMUDuUZHdQZKdUqO7hE1DxN0SpO1CpO0RlP1BlP8AUDFA7xAAMUDvQAAxQO8AADDQ5yRQAAAGMBAAAAAAAAAAAAAAAHAAAAAwAAAPPEAAAAlwB8AGoAAAAAAAAAAABEAF1XXAIAAH0BfQJ0AwAAAAAAAAAAAAB8AmQBpgIAAKsCAAAAAAAAAABzAYwWfAGAA2QAfQNuI3wAagIAAAAAAAAAAHIafAJqAwAAAAAAAAAAfQN8A4EQfAN8AGoEAAAAAAAAAAB2AHIHfAJqBQAAAAAAAAAAfQNuAmQAfQN8AqAGAAAAAAAAAAAAAAAAAAAAAAAAAAB8AHwDfAFkAqwDpgQAAKsEAAAAAAAAAAABAIxYZABTACkETnK9AQAAVCkDchABAAByWAAAANoTbmFtZV9pc190cnVuY2F0YWJsZSkHcicDAAByVgAAAHKRAQAAcpoCAABy7AAAAHIhAwAAcr0BAAApBHJLAAAAclgAAABy7AAAAHIQAQAAcwQAAAAgICAgcjsAAAByBQEAAHoiU2VsZWN0Ll9wb3B1bGF0ZV9jb2x1bW5fY29sbGVjdGlvbjYPAABzkQAAAIAA2Bcb1Bcv8AALCU4B8AALCU4BiUeIRJAh3RMamDGYbdETLNQTLPAAAQ0Z2BAY2A8TiHzYFhqQA5AD2BEVlB/wAAUNG9gWF5RskAPYExaQP6BzqGSsZqB9oH3YGhucLJBD+OAWGpAD2AwNj02KTZgkoEOoZMgEiE3RDE3UDE3QDE3QDE3wFwsJTgHwAAsJTgFyRQAAAGMCAAAAAAAAAAAAAAAHAAAAAwAAAPMYAQAAlwB8AGoAAAAAAAAAAABEAF2BfQJ8AqABAAAAAAAAAAAAAAAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAfQN8A4FofAN8AGoCAAAAAAAAAAB2AHJcfABqAwAAAAAAAAAAclV8AGoEAAAAAAAAAAByB3wDagUAAAAAAAAAAG4GfANqBgAAAAAAAAAAfQR8BHwAagcAAAAAAAAAAHYBcjd8A6AIAAAAAAAAAAAAAAAAAAAAAAAAAAB8AHwAagQAAAAAAAAAAHIHfANqCQAAAAAAAAAAbgFkAHwAagQAAAAAAAAAAHIHfANqBQAAAAAAAAAAbgFkAGQBrAKmBAAAqwQAAAAAAAAAAGMCAQBTAAEAZABTAIyCZABTACkDTlQpA3JYAAAAchABAAByKQMAACkKcsQCAAByEgEAAHLlAgAAcg0BAABykQEAAHKaAgAAchABAABy7AAAAHK9AQAAcj4BAAApBXJLAAAActMAAABykQAAAHKmAAAA2glvdXJfbGFiZWxzBQAAACAgICAgcjsAAAByEgEAAHoeU2VsZWN0Ll9yZWZyZXNoX2Zvcl9uZXdfY29sdW1uRA8AAHPCAAAAgADYGh6cK/AADAkc8AAMCRyIStgSHNcSNNISNLBW0RI81BI8iEPYDxKIf9gTFpgk1Bos0BMs0BMssBTUMUXQEyzYMja0L9AgTqADpA6gDsBzxHeQSdgXIKgErAbQFy7QFy7YHyKff5p/2Bwg2C8zrH/QIUigE6QaoBrARNgyNrQv0CBLoAOkDqAOwHTYMDTwCQAgL/EABSAa9AAFIBrwAAUZGvAABRka8AAFGRrwDAAYHJB0kHTwFQAQH/AWABAUiHRyRQAAAGMBAAAAAAAAAAAAAAADAAAAAwAAAPNYAAAAlwB8AGoAAAAAAAAAAABkAHUBcCF8AGoBAAAAAAAAAABkAHUBcBh0BQAAAAAAAAAAAAB8AGoDAAAAAAAAAABqBAAAAAAAAAAApgEAAKsBAAAAAAAAAABTAHI+AAAAKQVySQIAAHJKAgAAcmYBAAByTAIAAHJmAgAAckoAAABzAQAAACByOwAAAHKvAQAAeiFTZWxlY3QuX25lZWRzX3BhcmVuc19mb3JfZ3JvdXBpbmdUDwAAczgAAACAAOAMENQMHqBk0Awq8AACDTPYDxPUDyKoJNAPLvADAg0z5Q8TkETUFCnUFDHRDzLUDzLwBwQJCnJFAAAAYwIAAAAAAAAAAAAAAAQAAAADAAAA83YAAACXAHQBAAAAAAAAAAAAAHwBdAIAAAAAAAAAAAAApgIAAKsCAAAAAAAAAAByFnwAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAKYAAACrAAAAAAAAAAAAcwJ8AFMAdAcAAAAAAAAAAAAAfACmAQAAqwEAAAAAAAAAAFMAKQFhQAEAAFJldHVybiBhICdncm91cGluZycgY29uc3RydWN0IGFzIHBlciB0aGUKICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLkNsYXVzZUVsZW1lbnRgIHNwZWNpZmljYXRpb24uCgogICAgICAgIFRoaXMgcHJvZHVjZXMgYW4gZWxlbWVudCB0aGF0IGNhbiBiZSBlbWJlZGRlZCBpbiBhbiBleHByZXNzaW9uLiBOb3RlCiAgICAgICAgdGhhdCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBhcyBuZWVkZWQgd2hlbiBjb25zdHJ1Y3RpbmcKICAgICAgICBleHByZXNzaW9ucyBhbmQgc2hvdWxkIG5vdCByZXF1aXJlIGV4cGxpY2l0IHVzZS4KCiAgICAgICAgKQRyMgAAAHKuAQAAcq8BAAByMwEAAHI0AQAAcwIAAAAgIHI7AAAAciUBAAB6EVNlbGVjdC5zZWxmX2dyb3VwWw8AAHM/AAAAgAD1FAANF5B3pQ7RDC/UDC/wAwQJGOAUGNcUM9IUM9EUNdQUNfAFBAkY8AgAFBiIS90PG5hE0Q8h1A8h0AghckUAAABjAgAAAAAAAAAAAAAABQAAAAsAAADzKAAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHwAfAFmAmkAfAKkAY4BUwApAXphUmV0dXJuIGEgU1FMIGBgVU5JT05gYCBvZiB0aGlzIHNlbGVjdCgpIGNvbnN0cnVjdCBhZ2FpbnN0CiAgICAgICAgdGhlIGdpdmVuIHNlbGVjdGFibGUuCgogICAgICAgICkCcq4BAABygQIAAKkDcksAAAByxwAAAHJkAAAAcwMAAAAgICByOwAAAHLoAQAAegxTZWxlY3QudW5pb25rDwAAcx8AAACAAPUKABAe1A8rqESwJdAPQtAPQrg20A9C0A9C0AhCckUAAABjAgAAAAAAAAAAAAAABQAAAAsAAADzKAAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHwAfAFmAmkAfAKkAY4BUwApAXplUmV0dXJuIGEgU1FMIGBgVU5JT04gQUxMYGAgb2YgdGhpcyBzZWxlY3QoKSBjb25zdHJ1Y3QgYWdhaW5zdAogICAgICAgIHRoZSBnaXZlbiBzZWxlY3RhYmxlLgoKICAgICAgICApAnKuAQAAcoQCAAByLwMAAHMDAAAAICAgcjsAAABy6gEAAHoQU2VsZWN0LnVuaW9uX2FsbHIPAADzHwAAAIAA9QoAEB7UDy+wBLBl0A9G0A9GuHbQD0bQD0bQCEZyRQAAAGMCAAAAAAAAAAAAAAAFAAAACwAAAPMoAAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAfAB8AWYCaQB8AqQBjgFTACkBemJSZXR1cm4gYSBTUUwgYGBFWENFUFRgYCBvZiB0aGlzIHNlbGVjdCgpIGNvbnN0cnVjdCBhZ2FpbnN0CiAgICAgICAgdGhlIGdpdmVuIHNlbGVjdGFibGUuCgogICAgICAgICkCcq4BAAByhgIAAHIvAwAAcwMAAAAgICByOwAAANoHZXhjZXB0X3oOU2VsZWN0LmV4Y2VwdF95DwAAcx8AAACAAPUKABAe1A8sqFSwNdAPQ9APQ7hG0A9D0A9D0AhDckUAAABjAgAAAAAAAAAAAAAABQAAAAsAAADzKAAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHwAfAFmAmkAfAKkAY4BUwApAXpmUmV0dXJuIGEgU1FMIGBgRVhDRVBUIEFMTGBgIG9mIHRoaXMgc2VsZWN0KCkgY29uc3RydWN0IGFnYWluc3QKICAgICAgICB0aGUgZ2l2ZW4gc2VsZWN0YWJsZS4KCiAgICAgICAgKQJyrgEAAHKJAgAAci8DAABzAwAAACAgIHI7AAAA2gpleGNlcHRfYWxsehFTZWxlY3QuZXhjZXB0X2FsbIAPAABzHwAAAIAA9QoAEB7UDzCwFLB10A9H0A9HwAbQD0fQD0fQCEdyRQAAAGMCAAAAAAAAAAAAAAAFAAAACwAAAPMoAAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAfAB8AWYCaQB8AqQBjgFTACkBemVSZXR1cm4gYSBTUUwgYGBJTlRFUlNFQ1RgYCBvZiB0aGlzIHNlbGVjdCgpIGNvbnN0cnVjdCBhZ2FpbnN0CiAgICAgICAgdGhlIGdpdmVuIHNlbGVjdGFibGUuCgogICAgICAgICkCcq4BAAByiwIAAHIvAwAAcwMAAAAgICByOwAAAHL1AAAAehBTZWxlY3QuaW50ZXJzZWN0hw8AAHIxAwAAckUAAABjAgAAAAAAAAAAAAAABQAAAAsAAADzKAAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHwAfAFmAmkAfAKkAY4BUwApAXppUmV0dXJuIGEgU1FMIGBgSU5URVJTRUNUIEFMTGBgIG9mIHRoaXMgc2VsZWN0KCkgY29uc3RydWN0CiAgICAgICAgYWdhaW5zdCB0aGUgZ2l2ZW4gc2VsZWN0YWJsZS4KCiAgICAgICAgKQJyrgEAAHKOAgAAci8DAABzAwAAACAgIHI7AAAA2g1pbnRlcnNlY3RfYWxsehRTZWxlY3QuaW50ZXJzZWN0X2FsbI4PAABzHwAAAIAA9QoAEB7UDzOwRLgl0A9K0A9KwDbQD0rQD0rQCEpyRQAAAGMBAAAAAAAAAAAAAAADAAAAAwAAAPO8AAAAlwB8AGoAAAAAAAAAAAByB3wAagAAAAAAAAAAAFMAfABqAQAAAAAAAAAAfQF8AXMffABqAgAAAAAAAAAARABdFn0CfAJqAwAAAAAAAAAAfQN8A3ILfAN8AF8AAAAAAAAAAAB8A2MCAQBTAIwXbiV0CQAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAZAEZAAAAAAAAAAAAagMAAAAAAAAAAH0DfANyCXwDfABfAAAAAAAAAAAAfANTAGQAUwBykAIAACkFcksCAAByxAIAAHK1AgAAco8BAAByngAAACkEcksAAABywAIAAHLsAAAAcqQCAABzBAAAACAgICByOwAAAHKPAQAAegtTZWxlY3QuYmluZJUPAABziwAAAIAA2AsPjDrwAAEJHtgTF5Q60Awd2BAUlAuIBdgPFPAACgkZ2BUZ1BUm8AAEDR3wAAQNHZAB2BQVlEaQAdgTFPAAAhEd2CEikESUStgbHJBIkEiQSPAFAhEd8AUEDR31DAARFZBVkQuUC5hBlA7UECOIQdgPEPAAAg0Z2B0ekASUCtgXGJAI4A8TiHRyRQAAAGMCAAAAAAAAAAAAAAACAAAAAwAAAPMUAAAAlwB8AXwAXwAAAAAAAAAAAGQAUwByPgAAAHKmAgAAcqcCAABzAgAAACAgcjsAAAByqAIAAHoQU2VsZWN0Ll9zZXRfYmluZKcPAAByqQIAAHJFAAAAKQhOTk5GTlROTnLgAAAAKQFy1wIAAHLGAQAAcj4AAAApQ3JNAAAAck4AAAByTwAAAHJpAAAAcmoAAAByggAAAHKNAAAAciwAAADaDWltbXV0YWJsZWRpY3Ry3wIAAHLeAgAAcrECAAByvgIAAHLSAgAAcs8CAAByQQAAAHL/AAAAchkBAABymwEAAHInAQAAclAAAAByxAIAAHLTAgAAcpECAABywAIAAHLcAgAAcgoAAABy2QIAAHLVAgAA2gZtZXRob2Ry4wIAAHLlAgAAcmwCAABywwAAAHISAAAAcksBAAByTgEAAHLTAAAAciABAAByQgEAAHL+AgAAcgQDAAByuwIAAHK6AgAAcgwDAABykgEAAHITAwAAchYDAAByCwIAAHIZAwAAcgIDAAByBgMAAHILAwAAcicDAAByBQEAAHISAQAAcq8BAAByJQEAAHLoAQAAcuoBAAByMwMAAHI1AwAAcvUAAAByOAMAAHKPAQAAcqgCAAByxwEAAHLIAQAAcwEAAABAcjsAAAByYQAAAHJhAAAACAsAAHOABAAA+IAAgACAAIAAgADYBCzQBCzgFR2ATuAQEoBJ2BASgEnYDR+IVNQNH9ENIdQNIYBG2BcZ0AQU2BAVgEnYExeATNgRE4BK2Bgc0AQV2Bkj1Bk20AQW2BEVgErgBRuAVNQFG/ACCRQK8BQHFArwFxMGBvEAEwYG9AATBgbwLAARFdgUGNgRFdgRFtgPE9gSFtgRFdgRFfATXQQFMvAAXQQFMvAAXQQFMvEpEwYG9AATBgbwKF0EBTLwfggABg7wAhoFFfAAGgUV8QMABg6EWPACGgUV8DoARwFLAfADUgEFFfAAUgEFFfAAUgEFFfAAUgEFFfBoAgMFHPAAAwUc8AADBRzwCgAGDvACAwUp8AADBSnxAwAGDoRY8AIDBSnwChcFOPAAFwU48AAXBTjwABcFOPAyAAYR8AIlBVAB8AAlBVAB8AAlBVAB8QMABhGEW/ACJQVQAfBOAQAGDvACBgUK8AAGBQrxAwAGDoRY8AIGBQrwEAAGGNQFHvACCgUz8AAKBTPxAwAGH9QFHvACCgUz8BgABg7wAgYFNPAABgU08QMABg6EWPACBgU08BAABhjwAg8FMPAADwUw8QMABhjUBRfwAg8FMPAiBwUV8AAHBRXwAAcFFfASACUr8AA6BR/wADoFH/AAOgUf8AA6BR/wADoFH/AAOgUf8HgBEQUK8AARBQrwABEFCvAAEQUK8CYABhHwAg4FI/AADgUj8QMABhGEW/ACDgUj8CAABheAVNQFFtAXLNEFLdQFLfACHAUK8AAcBQrwABwFCvEDAAYu1AUt8AIcBQrwPAAGEfACTAEFH/AATAEFH/EDAAYRhFvwAkwBBR/wXAIABhHwAgcFLfAABwUt8QMABhGEW/ACBwUt8BIABhHwAgYFI/AABgUj8QMABhGEW/ACBgUj8BAABhHwAhAFIvAAEAUi8QMABhGEW/ACEAUi8CQABhHwAiIFJfAAIgUl8QMABhGEW/ACIgUl8EgBAAYR8AI6BQ7wADoFDvEDAAYRhFvwAjoFDvB4AQAGEfACIwUO8AAjBQ7xAwAGEYRb8AIjBQ7wSgENBQrwAA0FCvAADQUK8B4XBTnwABcFOfAAFwU58DIKBTTwAAoFNPAACgU08BgNBVAB8AANBVAB8AANBVAB8B4MBUEB8AAMBUEB8AAMBUEB8BwLBTzwAAsFPPAACwU88BoABhjwAhcFDvAAFwUO8QMABhjUBRfwAhcFDvAyDAVOAfAADAVOAfAADAVOAfAcDgUU8AAOBRTwAA4FFPAgBQUK8AAFBQrwAAUFCvAODgUi8AAOBSLwAA4FIvAADgUi8CAFBUMB8AAFBUMB8AAFBUMB8A4FBUcB8AAFBUcB8AAFBUcB8A4FBUQB8AAFBUQB8AAFBUQB8A4FBUgB8AAFBUgB8AAFBUgB8A4FBUcB8AAFBUcB8AAFBUcB8A4FBUsB8AAFBUsB8AAFBUsB8A4QBRTwABAFFPAAEAUU8CQBBRrwAAEFGvAAAQUa8AYADBSIOJBEmCnRCyTUCySARIBEgESARIBEckUAAAByYQAAAGMAAAAAAAAAAAAAAAACAAAAAAAAAPNWAAAAlwBlAFoBZABaAmcAWgNkAVoEZAJaBWQDhABaBmUHZASEAKYAAACrAAAAAAAAAAAAWghlCFoJZQpkBYQApgAAAKsAAAAAAAAAAABaC2QGhABaDGQHUwApCHI6AgAAVEZjAgAAAAAAAAAAAAAAAgAAAAMAAADzRgAAAJcAfAF8AF8AAAAAAAAAAAB8AaABAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAHwAXwIAAAAAAAAAAGQAUwByPgAAACkDcjgAAABykQIAAHLVAgAAcvEBAABzAgAAACAgcjsAAAByJwEAAHoVU2NhbGFyU2VsZWN0Ll9faW5pdF9fsg8AAHMgAAAAgADYFx6IBIwM2BQb1xQo0hQo0RQq1BQqiASMCYgJiAlyRQAAAGMBAAAAAAAAAAAAAAADAAAAAwAAAPMqAAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAZAGmAQAAqwEAAAAAAAAAAIIBKQJOemNTY2FsYXIgU2VsZWN0IGV4cHJlc3Npb24gaGFzIG5vIGNvbHVtbnM7IHVzZSB0aGlzIG9iamVjdCBkaXJlY3RseSB3aXRoaW4gYSBjb2x1bW4tbGV2ZWwgZXhwcmVzc2lvbi5y4QIAAHJKAAAAcwEAAAAgcjsAAABynwAAAHoUU2NhbGFyU2VsZWN0LmNvbHVtbnO2DwAAcxwAAACAAOUOEdQOJfACAg0w8QMEDwr0AAQPCvAABAkKckUAAABjAgAAAAAAAAAAAAAAAwAAAAMAAADzRAAAAJcAfABqAAAAAAAAAAAAoAEAAAAAAAAAAAAAAAAAAAAAAAAAAHwBpgEAAKsBAAAAAAAAAAB8AF8AAAAAAAAAAABkAVMAKQJ6dUFwcGx5IGEgV0hFUkUgY2xhdXNlIHRvIHRoZSBTRUxFQ1Qgc3RhdGVtZW50IHJlZmVycmVkIHRvCiAgICAgICAgYnkgdGhpcyA6Y2xhc3M6YF9leHByZXNzaW9uLlNjYWxhclNlbGVjdGAuCgogICAgICAgIE4pAnI4AAAAcgQDAAApAnJLAAAAcmQBAABzAgAAACAgcjsAAAByBAMAAHoSU2NhbGFyU2VsZWN0LndoZXJlwA8AAHMfAAAAgADwDAAYHJR81xcp0hcpqCTRFy/UFy+IBIwMiAyIDHJFAAAAYwEAAAAAAAAAAAAAAAEAAAALAAAA8wYAAACXAHwAUwByPgAAAHJRAAAAck0BAABzAgAAACAgcjsAAAByJQEAAHoXU2NhbGFyU2VsZWN0LnNlbGZfZ3JvdXDIDwAAcwcAAACAANgPE4gLckUAAABOKQ1yTQAAAHJOAAAAck8AAAByCQAAAHIaAQAA2hZfaXNfaW1wbGljaXRseV9ib29sZWFucicBAAByUAAAAHKfAAAAcuwAAAByCgAAAHIEAwAAciUBAAByUQAAAHJFAAAAcjsAAAByOgIAAHI6AgAArQ8AAHN+AAAAgACAAIAAgACAANgUFoBN2Bkd0AQW2B0i0AQa8AQCBSvwAAIFK/AAAgUr8AgABg7wAgUFCvAABQUK8QMABg6EWPACBQUK8A4ACRCAQeAFEPACBQUw8AAFBTDxAwAGEYRb8AIFBTDwDgEFFPAAAQUU8AABBRTwAAEFFPAAAQUUckUAAAByOgIAAGMAAAAAAAAAAAAAAAACAAAAAAAAAPNKAAAAlwBlAFoBZABaAmQBWgNlBGoFAAAAAAAAAABaBWcAWgZkAoQAWgdkCWQEhAFaCGQFhABaCWQGhABaCmQHhABaC2QIhABaDGQDUwApCtoGRXhpc3Rzeh9SZXByZXNlbnQgYW4gYGBFWElTVFNgYCBjbGF1c2UuYwEAAAAAAAAAAAAAAAcAAAAPAAAA80ABAACXAHwBcit0AQAAAAAAAAAAAAB8AWQBGQAAAAAAAAAAAHQCAAAAAAAAAAAAAHQEAAAAAAAAAAAAAGYCpgIAAKsCAAAAAAAAAAByCXwBZAEZAAAAAAAAAAAAfQNuQ3wBcxF0BwAAAAAAAAAAAABkAqYBAACrAQAAAAAAAAAAZwFmAX0BdAkAAAAAAAAAAAAAfAFpAHwCpAGOAaAFAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAKAGAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAH0DdA8AAAAAAAAAAAAAaggAAAAAAAAAAHwAfAN0EgAAAAAAAAAAAABqCgAAAAAAAAAAdBYAAAAAAAAAAAAAagwAAAAAAAAAAGQDrASmBQAAqwUAAAAAAAAAAAEAZAVTACkGYVwDAABDb25zdHJ1Y3QgYSBuZXcgOmNsYXNzOmBfZXhwcmVzc2lvbi5FeGlzdHNgIGFnYWluc3QgYW4gZXhpc3RpbmcKICAgICAgICA6Y2xhc3M6YF9leHByZXNzaW9uLlNlbGVjdGAgb2JqZWN0LgoKICAgICAgICBDYWxsaW5nIHN0eWxlcyBhcmUgb2YgdGhlIGZvbGxvd2luZyBmb3Jtczo6CgogICAgICAgICAgICAjIHVzZSBvbiBhbiBleGlzdGluZyBzZWxlY3QoKQogICAgICAgICAgICBzID0gc2VsZWN0KFt0YWJsZS5jLmNvbDFdKS53aGVyZSh0YWJsZS5jLmNvbDI9PTUpCiAgICAgICAgICAgIHNfZSA9IGV4aXN0cyhzKQoKICAgICAgICAgICAgIyBhbiBleGlzdHMgaXMgdXN1YWxseSB1c2VkIGluIGEgd2hlcmUgb2YgYW5vdGhlciBzZWxlY3QKICAgICAgICAgICAgIyB0byBwcm9kdWNlIGEgV0hFUkUgRVhJU1RTIChTRUxFQ1QgLi4uICkKICAgICAgICAgICAgc2VsZWN0KFt0YWJsZS5jLmNvbDFdKS53aGVyZShzX2UpCgogICAgICAgICAgICAjIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGluIGEgc2VsZWN0IHRvIHByb2R1Y2UgYQogICAgICAgICAgICAjIFNFTEVDVCBFWElTVFMgKFNFTEVDVCAuLi4gKSBxdWVyeQogICAgICAgICAgICBzZWxlY3QoW3NfZV0pCgogICAgICAgICAgICAjIGNvbnN0cnVjdCBhIHNlbGVjdCgpIGF0IG9uY2UKICAgICAgICAgICAgZXhpc3RzKFsnKiddLCAqKnNlbGVjdF9hcmd1bWVudHMpLndoZXJlKGNyaXRlcmlvbikKCiAgICAgICAgICAgICMgY29sdW1ucyBhcmd1bWVudCBpcyBvcHRpb25hbCwgZ2VuZXJhdGVzICJFWElTVFMgKFNFTEVDVCAqKSIKICAgICAgICAgICAgIyBieSBkZWZhdWx0LgogICAgICAgICAgICBleGlzdHMoKS53aGVyZSh0YWJsZS5jLmNvbDI9PTUpCgogICAgICAgIHICAAAActcCAABUKQNy8gAAAHJUAAAA2hd3cmFwc19jb2x1bW5fZXhwcmVzc2lvbk4pDXIyAAAAckEAAAByOgIAAHImAAAAcmEAAAByugEAAHIlAQAAcigAAAByJwEAAHIGAAAA2gZleGlzdHNyBwAAANoLQk9PTEVBTlRZUEUpBHJLAAAAcmMAAAByZAAAAHJBAgAAcwQAAAAgICAgcjsAAAByJwEAAHoPRXhpc3RzLl9faW5pdF9f0g8AAHOxAAAAgADwNAAMEPAABQlBAZVKmHSgQZx3rRq1XNAoQtEUQ9QUQ/AABQlBAdgQFJBRlAeIQYhB4BMX8AABDTDdGSeoA9EZLNQZLNAYLdAXL5AE3RAWmATQECegBtAQJ9AQJ9cQMdIQMdEQM9QQM9cQPtIQPtEQQNQQQIhB5QgX1Agg2AwQ2AwN3RUe1BUl3RIa1BIm2CQo8AsGCQrxAAYJCvQABgkK8AAGCQrwAAYJCvAABgkKckUAAABOYwIAAAAAAAAAAAAAAAUAAAALAAAA8yAAAACXAHQBAAAAAAAAAAAAAHwAZwF8AWYCaQB8AqQBjgFTAHI+AAAAcqgAAAByqQAAAHMDAAAAICAgcjsAAAByQgAAAHoNRXhpc3RzLnNlbGVjdPsPAABzHAAAAIAA3Q8VkHSQZphr0A800A80qFbQDzTQDzTQCDRyRQAAAGMBAAAAAAAAAAAAAAADAAAABwAAAPN6AAAAlwB8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAH0CAgB8AGoBAAAAAAAAAABqAgAAAAAAAAAAfAGOAKADAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAHwCXwEAAAAAAAAAAHwCUwByPgAAACkEchIAAAByOAAAAHKSAQAAciUBAACpA3JLAAAAcpEAAABypAIAAHMDAAAAICAgcjsAAABykgEAAHoQRXhpc3RzLmNvcnJlbGF0Zf4PAABzMwAAAIAA2AwQj0uKS4lNjE2IAdgUKpBElEzUFCqoStAUN9cUQtIUQtEURNQURIgBjAnYDxCICHJFAAAAYwEAAAAAAAAAAAAAAAMAAAAHAAAA83oAAACXAHwAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKYAAACrAAAAAAAAAAAAfQICAHwAagEAAAAAAAAAAGoCAAAAAAAAAAB8AY4AoAMAAAAAAAAAAAAAAAAAAAAAAAAAAKYAAACrAAAAAAAAAAAAfAJfAQAAAAAAAAAAfAJTAHI+AAAAKQRyEgAAAHI4AAAAchMDAAByJQEAAHJLAwAAcwMAAAAgICByOwAAAHITAwAAehdFeGlzdHMuY29ycmVsYXRlX2V4Y2VwdAMQAABzMwAAAIAA2AwQj0uKS4lNjE2IAdgUMZBElEzUFDGwOtAUPtcUSdIUSdEUS9QUS4gBjAnYDxCICHJFAAAAYwIAAAAAAAAAAAAAAAMAAAADAAAA85AAAACXAHwAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKYAAACrAAAAAAAAAAAAfQJ8AGoBAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAfAGmAQAAqwEAAAAAAAAAAKADAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAqwAAAAAAAAAAAHwCXwEAAAAAAAAAAHwCUwApAXrTUmV0dXJuIGEgbmV3IDpjbGFzczpgX2V4cHJlc3Npb24uRXhpc3RzYCBjb25zdHJ1Y3QsCiAgICAgICAgYXBwbHlpbmcgdGhlIGdpdmVuCiAgICAgICAgZXhwcmVzc2lvbiB0byB0aGUgOm1ldGg6YF9leHByZXNzaW9uLlNlbGVjdC5zZWxlY3RfZnJvbWAKICAgICAgICBtZXRob2Qgb2YgdGhlIHNlbGVjdAogICAgICAgIHN0YXRlbWVudCBjb250YWluZWQuCgogICAgICAgICkEchIAAAByOAAAAHIMAwAAciUBAACpA3JLAAAAcl0AAABypAIAAHMDAAAAICAgcjsAAAByDAMAAHoSRXhpc3RzLnNlbGVjdF9mcm9tCBAAAHM5AAAAgADwEAANEY9LikuJTYxNiAHYFBiUTNcULNIULKhW0RQ01BQ01xQ/0hQ/0RRB1BRBiAGMCdgPEIgIckUAAABjAgAAAAAAAAAAAAAAAwAAAAMAAADzkAAAAJcAfACgAAAAAAAAAAAAAAAAAAAAAAAAAAAApgAAAKsAAAAAAAAAAAB9AnwAagEAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAB8AaYBAACrAQAAAAAAAAAAoAMAAAAAAAAAAAAAAAAAAAAAAAAAAKYAAACrAAAAAAAAAAAAfAJfAQAAAAAAAAAAfAJTACkBeq9SZXR1cm4gYSBuZXcgOmZ1bmM6YF9leHByZXNzaW9uLmV4aXN0c2AgY29uc3RydWN0IHdpdGggdGhlCiAgICAgICAgZ2l2ZW4gZXhwcmVzc2lvbiBhZGRlZCB0bwogICAgICAgIGl0cyBXSEVSRSBjbGF1c2UsIGpvaW5lZCB0byB0aGUgZXhpc3RpbmcgY2xhdXNlIHZpYSBBTkQsIGlmIGFueS4KCiAgICAgICAgKQRyEgAAAHI4AAAAcgQDAAByJQEAAHJOAwAAcwMAAAAgICByOwAAAHIEAwAAegxFeGlzdHMud2hlcmUUEAAAczkAAACAAPAMAA0Rj0uKS4lNjE2IAdgUGJRM1xQm0hQmoHbRFC7UFC7XFDnSFDnRFDvUFDuIAYwJ2A8QiAhyRQAAAHI+AAAAKQ1yTQAAAHJOAAAAck8AAAByaQAAAHIoAAAAcmoAAAByCQAAAHInAQAAckIAAABykgEAAHITAwAAcgwDAAByBAMAAHJRAAAAckUAAAByOwAAAHJEAwAAckQDAADMDwAAc4cAAACAAIAAgACAAIAA2AQp0AQp4BUk1BUzgE7YFBaATfAEJwUK8AAnBQrwACcFCvBSAQEFNfAAAQU18AABBTXwAAEFNfAGAwUR8AADBRHwAAMFEfAKAwUR8AADBRHwAAMFEfAKCgUR8AAKBRHwAAoFEfAYCAUR8AAIBRHwAAgFEfAACAUR8AAIBRFyRQAAAHJEAwAAYwAAAAAAAAAAAAAAAAIAAAAAAAAA82QAAACXAGUAWgFkAFoCZAFaA2QCWgRkA1oFZAxkBYQBWgZlB2QGhACmAAAAqwAAAAAAAAAAAFoIZQlkB4QApgAAAKsAAAAAAAAAAABaCmQIhABaC2UMZgFkCYQBWg1kCoQAWg5kC1MAKQ3aClRleHRBc0Zyb21hZAIAAFdyYXAgYSA6Y2xhc3M6YF9leHByZXNzaW9uLlRleHRDbGF1c2VgIGNvbnN0cnVjdCB3aXRoaW4gYQogICAgOmNsYXNzOmBfZXhwcmVzc2lvbi5TZWxlY3RCYXNlYAogICAgaW50ZXJmYWNlLgoKICAgIFRoaXMgYWxsb3dzIHRoZSA6Y2xhc3M6YF9leHByZXNzaW9uLlRleHRDbGF1c2VgIG9iamVjdCB0byBnYWluIGEKICAgIGBgLmNgYCBjb2xsZWN0aW9uCiAgICBhbmQgb3RoZXIgRlJPTS1saWtlIGNhcGFiaWxpdGllcyBzdWNoIGFzCiAgICA6bWV0aDpgX2V4cHJlc3Npb24uRnJvbUNsYXVzZS5hbGlhc2AsCiAgICA6bWV0aDpgX2V4cHJlc3Npb24uU2VsZWN0QmFzZS5jdGVgLCBldGMuCgogICAgVGhlIDpjbGFzczpgLlRleHRBc0Zyb21gIGNvbnN0cnVjdCBpcyBwcm9kdWNlZCB2aWEgdGhlCiAgICA6bWV0aDpgX2V4cHJlc3Npb24uVGV4dENsYXVzZS5jb2x1bW5zYAogICAgbWV0aG9kIC0gc2VlIHRoYXQgbWV0aG9kIGZvciBkZXRhaWxzLgoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuOS4wCgogICAgLi4gc2VlYWxzbzo6CgogICAgICAgIDpmdW5jOmBfZXhwcmVzc2lvbi50ZXh0YAoKICAgICAgICA6bWV0aDpgX2V4cHJlc3Npb24uVGV4dENsYXVzZS5jb2x1bW5zYAoKICAgINoMdGV4dF9hc19mcm9tVEZjBAAAAAAAAAAAAAAAAgAAAAMAAADzMAAAAJcAfAF8AF8AAAAAAAAAAAB8AnwAXwEAAAAAAAAAAHwDfABfAgAAAAAAAAAAZABTAHI+AAAAKQNyOAAAANoLY29sdW1uX2FyZ3PaCnBvc2l0aW9uYWwpBHJLAAAActoCAABynwAAAHJVAwAAcwQAAAAgICAgcjsAAAByJwEAAHoTVGV4dEFzRnJvbS5fX2luaXRfXzwQAABzHAAAAIAA2BcbiASMDNgbIogE1AgY2BokiASMD4gPiA9yRQAAAGMBAAAAAAAAAAAA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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 19
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
annotation.cpython-311.pyc
8.78 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
base.cpython-311.pyc
33.95 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
compiler.cpython-311.pyc
156.80 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
crud.cpython-311.pyc
28.82 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ddl.cpython-311.pyc
53.22 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
default_comparator.cpython-311.pyc
13.43 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
dml.cpython-311.pyc
39.22 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
elements.cpython-311.pyc
197.28 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
expression.cpython-311.pyc
9.42 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
functions.cpython-311.pyc
48.73 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
naming.cpython-311.pyc
8.92 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
operators.cpython-311.pyc
55.27 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
schema.cpython-311.pyc
210.17 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
selectable.cpython-311.pyc
171.80 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
sqltypes.cpython-311.pyc
124.29 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
type_api.cpython-311.pyc
59.47 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
util.cpython-311.pyc
41.21 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
visitors.cpython-311.pyc
20.17 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-311.pyc
4.79 KB
lrw-r--r--
2026-02-06 08:01:45
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).