REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 142.91 KB
Close
//opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/sql/__pycache__/schema.cpython-37.pyc
Text
Base64
Qg0NCgAAAADDzDRdlIECAOMAAAAAAAAAAAAAAAAGAAAAQAAAAHMAAwAAZABaAGQBZAJsAW0CWgIBAGQBZANsA1oDZAFkA2wEWgRkAWQDbAVaBWQEZAVsBm0HWgcBAGQEZAZsBm0IWggBAGQEZAdsBm0JWgkBAGQEZAhsCm0LWgsBAGQEZAlsCm0MWgwBAGQEZApsCm0NWg0BAGQEZAtsCm0OWg4BAGQEZAxsD20QWhABAGQEZA1sD20RWhEBAGQEZA5sD20SWhIBAGQEZA9sD20TWhMBAGQEZBBsD20UWhQBAGQEZBFsD20VWhUBAGQEZBJsD20WWhYBAGQEZBNsD20XWhcBAGQEZBRsGG0ZWhkBAGQVZBZsBm0aWhoBAGQVZBdsBm0bWhsBAGQVZBhsBm0cWhwBAGQVZBlsBm0dWh0BAGUdoB5kGqEBWh9lHaAeZBtkHKECWiBkHWQehABaIWQfZCCEAFoiZRxqI0cAZCFkIoQAZCJlDmUJaiSDBIMBWiVHAGQjZCSEAGQkZQ1lJWUZgwVaJkcAZCVkJoQAZCZlDWUlZRSDBVonRwBkJ2QohABkKGUNZSWDBFooRwBkKWQqhABkKmUpgwNaKkcAZCtkLIQAZCxlKmUlgwRaK0cAZC1kLoQAZC5lK4MDWixHAGQvZDCEAGQwZSuDA1otZRxqI0cAZDFkMoQAZDJlKmUOgwSDAVouRwBkM2Q0hABkNGUugwNaL2UdoDBkNWQ2oQJHAGQ3ZDiEAGQ4ZS+DA4MBWjFHAGQ5ZDqEAGQ6ZQ1lJYMEWjJkO2Q8hABaM2Q9ZD6EAFo0RwBkP2RAhABkQGUpgwNaNUcAZEFkQoQAZEJlNWUygwRaNkcAZENkRIQAZERlNoMDWjdHAGRFZEaEAGRGZTaDA1o4RwBkR2RIhABkSGU2gwNaOUcAZElkSoQAZEplNoMDWjpHAGRLZEyEAGRMZQ1lNWUlgwVaO2UdoDxkTWROaQGhAVo9RwBkT2RQhABkUGUlgwNaPkcAZFFkUoQAZFJlPoMDWj9HAGRTZFSEAGRUZSmDA1pAZUBkA4MBWkFlQGpCWkJkA1MAKVVhLwQAAFRoZSBzY2hlbWEgbW9kdWxlIHByb3ZpZGVzIHRoZSBidWlsZGluZyBibG9ja3MgZm9yIGRhdGFiYXNlIG1ldGFkYXRhLgoKRWFjaCBlbGVtZW50IHdpdGhpbiB0aGlzIG1vZHVsZSBkZXNjcmliZXMgYSBkYXRhYmFzZSBlbnRpdHkgd2hpY2ggY2FuIGJlCmNyZWF0ZWQgYW5kIGRyb3BwZWQsIG9yIGlzIG90aGVyd2lzZSBwYXJ0IG9mIHN1Y2ggYW4gZW50aXR5LiAgRXhhbXBsZXMgaW5jbHVkZQp0YWJsZXMsIGNvbHVtbnMsIHNlcXVlbmNlcywgYW5kIGluZGV4ZXMuCgpBbGwgZW50aXRpZXMgYXJlIHN1YmNsYXNzZXMgb2YgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuU2NoZW1hSXRlbWAsIGFuZCBhcwpkZWZpbmVkIGluIHRoaXMgbW9kdWxlIHRoZXkgYXJlIGludGVuZGVkIHRvIGJlIGFnbm9zdGljIG9mIGFueSB2ZW5kb3Itc3BlY2lmaWMKY29uc3RydWN0cy4KCkEgY29sbGVjdGlvbiBvZiBlbnRpdGllcyBhcmUgZ3JvdXBlZCBpbnRvIGEgdW5pdCBjYWxsZWQKOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuTWV0YURhdGFgLiBNZXRhRGF0YSBzZXJ2ZXMgYXMgYSBsb2dpY2FsIGdyb3VwaW5nIG9mCnNjaGVtYSBlbGVtZW50cywgYW5kIGNhbiBhbHNvIGJlIGFzc29jaWF0ZWQgd2l0aCBhbiBhY3R1YWwgZGF0YWJhc2UgY29ubmVjdGlvbgpzdWNoIHRoYXQgb3BlcmF0aW9ucyBpbnZvbHZpbmcgdGhlIGNvbnRhaW5lZCBlbGVtZW50cyBjYW4gY29udGFjdCB0aGUgZGF0YWJhc2UKYXMgbmVlZGVkLgoKVHdvIG9mIHRoZSBlbGVtZW50cyBoZXJlIGFsc28gYnVpbGQgdXBvbiB0aGVpciAic3ludGFjdGljIiBjb3VudGVycGFydHMsIHdoaWNoCmFyZSBkZWZpbmVkIGluIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24uYCwgc3BlY2lmaWNhbGx5CjpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBhbmQgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29sdW1uYC4KU2luY2UgdGhlc2Ugb2JqZWN0cyBhcmUgcGFydCBvZiB0aGUgU1FMIGV4cHJlc3Npb24gbGFuZ3VhZ2UsIHRoZXkgYXJlIHVzYWJsZQphcyBjb21wb25lbnRzIGluIFNRTCBleHByZXNzaW9ucy4KCukAAAAAKQHaD2Fic29sdXRlX2ltcG9ydE7pAQAAACkB2gNkZGwpAdoIdHlwZV9hcGkpAdoIdmlzaXRvcnMpAdoOX2JpbmRfb3JfZXJyb3IpAdoQQ29sdW1uQ29sbGVjdGlvbikB2g1EaWFsZWN0S1dBcmdzKQHaEVNjaGVtYUV2ZW50VGFyZ2V0KQHaDV9hc190cnVuY2F0ZWQpAdoXX2RvY3VtZW50X3RleHRfY29lcmNpb24pAdoQX2xpdGVyYWxfYXNfdGV4dCkB2g1DbGF1c2VFbGVtZW50KQHaDENvbHVtbkNsYXVzZSkB2g1Db2x1bW5FbGVtZW50KQHaC3F1b3RlZF9uYW1lKQHaClRleHRDbGF1c2UpAdoLVGFibGVDbGF1c2XpAgAAACkB2gVldmVudCkB2gNleGMpAdoKaW5zcGVjdGlvbikB2gR1dGlsWg1yZXRhaW5fc2NoZW1hWgxibGFua19zY2hlbWF6y1N5bWJvbCBpbmRpY2F0aW5nIHRoYXQgYSA6Y2xhc3M6YC5UYWJsZWAgb3IgOmNsYXNzOmAuU2VxdWVuY2VgCiAgICBzaG91bGQgaGF2ZSAnTm9uZScgZm9yIGl0cyBzY2hlbWEsIGV2ZW4gaWYgdGhlIHBhcmVudAogICAgOmNsYXNzOmAuTWV0YURhdGFgIGhhcyBzcGVjaWZpZWQgYSBzY2hlbWEuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMS4wLjE0CgogICAgYwIAAAAAAAAAAgAAAAIAAABDAAAAcxwAAAB8AWQAawhyDHwAUwB8AWQBFwB8ABcAUwBkAFMAKQJO2gEuqQApAtoEbmFtZdoGc2NoZW1hchoAAAByGgAAAPpIL29wdC9hbHQvcHl0aG9uMzcvbGliNjQvcHl0aG9uMy43L3NpdGUtcGFja2FnZXMvc3FsYWxjaGVteS9zcWwvc2NoZW1hLnB52g5fZ2V0X3RhYmxlX2tleUkAAABzBgAAAAABCAEEAnIeAAAAYwMAAAAAAAAABAAAAAUAAAADAAAAcxwAAACHAIcBZgJkAWQChAh9A3QAoAF8AGkAfAOhA1MAKQNOYwEAAAAAAAAAAQAAAAMAAAATAAAAczQAAAB0AHwAdAGDAnIsfABqAogAawhyLHwAagOIAGoEawZyLIgBagR8AGoDGQBTAGQAUwBkAFMAKQFOKQXaCmlzaW5zdGFuY2XaBkNvbHVtbtoFdGFibGXaA2tledoBYykB2gNjb2wpAtoMc291cmNlX3RhYmxl2gx0YXJnZXRfdGFibGVyGgAAAHIdAAAA2gdyZXBsYWNlUwAAAHMKAAAAAAIKAQoBDAIMAnohX2NvcHlfZXhwcmVzc2lvbi48bG9jYWxzPi5yZXBsYWNlKQJyBgAAAFoUcmVwbGFjZW1lbnRfdHJhdmVyc2UpBFoKZXhwcmVzc2lvbnIlAAAAciYAAAByJwAAAHIaAAAAKQJyJQAAAHImAAAAch0AAADaEF9jb3B5X2V4cHJlc3Npb25SAAAAcwQAAAAAAQ4KcigAAABjAAAAAAAAAAAAAAAABQAAAEAAAABzYgAAAGUAWgFkAFoCZAFaA2QCWgRkA2QEhABaBWQFZAaEAFoGZAdkCIQAWgdlCGUJoApkCWQKoQJkC2QMhACDAYMBWgtlCWoMZA1kDoQAgwFaDWQPZBCEAFoOZBFkEoQAWg9kE1MAKRTaClNjaGVtYUl0ZW16M0Jhc2UgY2xhc3MgZm9yIGl0ZW1zIHRoYXQgZGVmaW5lIGEgZGF0YWJhc2Ugc2NoZW1hLtoLc2NoZW1hX2l0ZW1jAQAAAAAAAAADAAAABAAAAEcAAABzJAAAAHgefAFEAF0WfQJ8AmQBawlyBnwCoAB8AKEBAQBxBlcAZAFTACkCejdJbml0aWFsaXplIHRoZSBsaXN0IG9mIGNoaWxkIGl0ZW1zIGZvciB0aGlzIFNjaGVtYUl0ZW0uTikB2hlfc2V0X3BhcmVudF93aXRoX2Rpc3BhdGNoKQPaBHNlbGbaBGFyZ3PaBGl0ZW1yGgAAAHIaAAAAch0AAADaC19pbml0X2l0ZW1zZgAAAHMGAAAAAAMKAQgBehZTY2hlbWFJdGVtLl9pbml0X2l0ZW1zYwEAAAAAAAAAAgAAAAEAAABLAAAAcwQAAABnAFMAKQF6InVzZWQgdG8gYWxsb3cgU2NoZW1hVmlzaXRvciBhY2Nlc3NyGgAAACkCciwAAADaBmt3YXJnc3IaAAAAchoAAAByHQAAANoMZ2V0X2NoaWxkcmVubQAAAHMCAAAAAAJ6F1NjaGVtYUl0ZW0uZ2V0X2NoaWxkcmVuYwEAAAAAAAAAAQAAAAQAAABDAAAAcxAAAAB0AGoBfABkAWcBZAKNAlMAKQNO2gRpbmZvKQFaCm9taXRfa3dhcmcpAnIYAAAA2gxnZW5lcmljX3JlcHIpAXIsAAAAchoAAAByGgAAAHIdAAAA2ghfX3JlcHJfX3EAAABzAgAAAAABehNTY2hlbWFJdGVtLl9fcmVwcl9fegMwLjl61lRoZSA6YXR0cjpgLlNjaGVtYUl0ZW0ucXVvdGVgIGF0dHJpYnV0ZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gIFVzZSB0aGUgOmF0dHI6YC5xdW90ZWRfbmFtZS5xdW90ZWAgYXR0cmlidXRlIG9uIHRoZSBgYG5hbWVgYCBmaWVsZCBvZiB0aGUgdGFyZ2V0IHNjaGVtYSBpdGVtIHRvIHJldHJpZXZlcXVvdGVkIHN0YXR1cy5jAQAAAAAAAAABAAAAAQAAAEMAAABzCAAAAHwAagBqAVMAKQF6klJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGBgcXVvdGVgYCBmbGFnIHBhc3NlZAogICAgICAgIHRvIHRoaXMgc2NoZW1hIG9iamVjdCwgZm9yIHRob3NlIHNjaGVtYSBpdGVtcyB3aGljaAogICAgICAgIGhhdmUgYSBgYG5hbWVgYCBmaWVsZC4KCiAgICAgICAgKQJyGwAAANoFcXVvdGUpAXIsAAAAchoAAAByGgAAAHIdAAAAcjUAAAB0AAAAcwIAAAAAD3oQU2NoZW1hSXRlbS5xdW90ZWMBAAAAAAAAAAEAAAABAAAAQwAAAHMEAAAAaQBTACkBYUwBAABJbmZvIGRpY3Rpb25hcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QsIGFsbG93aW5nIHVzZXItZGVmaW5lZAogICAgICAgIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgOmNsYXNzOmAuU2NoZW1hSXRlbWAuCgogICAgICAgIFRoZSBkaWN0aW9uYXJ5IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdoZW4gZmlyc3QgYWNjZXNzZWQuCiAgICAgICAgSXQgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBzb21lIG9iamVjdHMsCiAgICAgICAgc3VjaCBhcyA6Y2xhc3M6YC5UYWJsZWAgYW5kIDpjbGFzczpgLkNvbHVtbmAuCgogICAgICAgIHIaAAAAKQFyLAAAAHIaAAAAchoAAAByHQAAAHIyAAAAhQAAAHMCAAAAAAp6D1NjaGVtYUl0ZW0uaW5mb2MCAAAAAAAAAAIAAAADAAAAQwAAAHMoAAAAZAF8AGoAawZyFnwAagGgAqEAfAFfAXwBagOgBHwAagOhAQEAfAFTACkCTnIyAAAAKQXaCF9fZGljdF9fcjIAAADaBGNvcHnaCGRpc3BhdGNoWgdfdXBkYXRlKQJyLAAAAHIqAAAAchoAAAByGgAAAHIdAAAA2hFfc2NoZW1hX2l0ZW1fY29weZEAAABzCAAAAAABCgEMAQ4BehxTY2hlbWFJdGVtLl9zY2hlbWFfaXRlbV9jb3B5YwMAAAAAAAAAAwAAAAQAAABDAAAAcwwAAAB8AqAAfAF8AaECUwApAU4pAdoDZ2V0KQNyLAAAANoQZWZmZWN0aXZlX3NjaGVtYdoEbWFwX3IaAAAAchoAAAByHQAAANoRX3RyYW5zbGF0ZV9zY2hlbWGXAAAAcwIAAAAAAXocU2NoZW1hSXRlbS5fdHJhbnNsYXRlX3NjaGVtYU4pENoIX19uYW1lX1/aCl9fbW9kdWxlX1/aDF9fcXVhbG5hbWVfX9oHX19kb2NfX9oOX192aXNpdF9uYW1lX19yLwAAAHIxAAAAcjQAAADaCHByb3BlcnR5chgAAADaCmRlcHJlY2F0ZWRyNQAAANoRbWVtb2l6ZWRfcHJvcGVydHlyMgAAAHI5AAAAcj0AAAByGgAAAHIaAAAAchoAAAByHQAAAHIpAAAAYAAAAHMYAAAACAIEAgQCCAcIBAgDAgEEAQIBEA4ODAgGcikAAABjAAAAAAAAAAAAAAAABQAAAAAAAABzOgEAAGUAWgFkAFoCZAFaA2QCWgRlBWoGZANkBI0BZAVkBoQAgwFaB2UIZQWgCWQHZAihAmQJZAqEAIMBgwFaCmQLZAyEAFoLhwBmAWQNZA6ECFoMZEFkEmQThAFaDWUIZBRkFYQAgwFaDmUIZBZkF4QAgwFaD2QYZBmEAFoQZBpkG4QAWhFkHGQdhABaEmQeZB+EAFoTZQhkIGQhhACDAVoUZQhkImQjhACDAVoVZCRkJYQAWhZkJmQnhABaF2UIZChkKYQAgwFaGGQqZCuEAFoZZCxkLYQAWhpkLmQvhABaG2UFoAlkMGQxoQJkMmQzhACDAVocZDRkNYQAWh1kQmQ3ZDiEAVoeZENkOWQ6hAFaH2REZDtkPIQBWiBkRWQ9ZD6EAVohZSJkEWQRZgNkP2RAhAFaI4cABABaJFMAKUbaBVRhYmxlYbcyAABSZXByZXNlbnQgYSB0YWJsZSBpbiBhIGRhdGFiYXNlLgoKICAgIGUuZy46OgoKICAgICAgICBteXRhYmxlID0gVGFibGUoIm15dGFibGUiLCBtZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCdteXRhYmxlX2lkJywgSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbigndmFsdWUnLCBTdHJpbmcoNTApKQogICAgICAgICAgICAgICAgICAgKQoKICAgIFRoZSA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0IGNvbnN0cnVjdHMgYSB1bmlxdWUgaW5zdGFuY2Ugb2YgaXRzZWxmIGJhc2VkCiAgICBvbiBpdHMgbmFtZSBhbmQgb3B0aW9uYWwgc2NoZW1hIG5hbWUgd2l0aGluIHRoZSBnaXZlbgogICAgOmNsYXNzOmAuTWV0YURhdGFgIG9iamVjdC4gQ2FsbGluZyB0aGUgOmNsYXNzOmAuVGFibGVgCiAgICBjb25zdHJ1Y3RvciB3aXRoIHRoZSBzYW1lIG5hbWUgYW5kIHNhbWUgOmNsYXNzOmAuTWV0YURhdGFgIGFyZ3VtZW50CiAgICBhIHNlY29uZCB0aW1lIHdpbGwgcmV0dXJuIHRoZSAqc2FtZSogOmNsYXNzOmAuVGFibGVgIG9iamVjdCAtIGluIHRoaXMgd2F5CiAgICB0aGUgOmNsYXNzOmAuVGFibGVgIGNvbnN0cnVjdG9yIGFjdHMgYXMgYSByZWdpc3RyeSBmdW5jdGlvbi4KCiAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgOnJlZjpgbWV0YWRhdGFfZGVzY3JpYmluZ2AgLSBJbnRyb2R1Y3Rpb24gdG8gZGF0YWJhc2UgbWV0YWRhdGEKCiAgICBDb25zdHJ1Y3RvciBhcmd1bWVudHMgYXJlIGFzIGZvbGxvd3M6CgogICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoaXMgdGFibGUgYXMgcmVwcmVzZW50ZWQgaW4gdGhlIGRhdGFiYXNlLgoKICAgICAgICBUaGUgdGFibGUgbmFtZSwgYWxvbmcgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIGBgc2NoZW1hYGAgcGFyYW1ldGVyLAogICAgICAgIGZvcm1zIGEga2V5IHdoaWNoIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyA6Y2xhc3M6YC5UYWJsZWAgd2l0aGluCiAgICAgICAgdGhlIG93bmluZyA6Y2xhc3M6YC5NZXRhRGF0YWAgY29sbGVjdGlvbi4KICAgICAgICBBZGRpdGlvbmFsIGNhbGxzIHRvIDpjbGFzczpgLlRhYmxlYCB3aXRoIHRoZSBzYW1lIG5hbWUsIG1ldGFkYXRhLAogICAgICAgIGFuZCBzY2hlbWEgbmFtZSB3aWxsIHJldHVybiB0aGUgc2FtZSA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0LgoKICAgICAgICBOYW1lcyB3aGljaCBjb250YWluIG5vIHVwcGVyIGNhc2UgY2hhcmFjdGVycwogICAgICAgIHdpbGwgYmUgdHJlYXRlZCBhcyBjYXNlIGluc2Vuc2l0aXZlIG5hbWVzLCBhbmQgd2lsbCBub3QgYmUgcXVvdGVkCiAgICAgICAgdW5sZXNzIHRoZXkgYXJlIGEgcmVzZXJ2ZWQgd29yZCBvciBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycy4KICAgICAgICBBIG5hbWUgd2l0aCBhbnkgbnVtYmVyIG9mIHVwcGVyIGNhc2UgY2hhcmFjdGVycyBpcyBjb25zaWRlcmVkCiAgICAgICAgdG8gYmUgY2FzZSBzZW5zaXRpdmUsIGFuZCB3aWxsIGJlIHNlbnQgYXMgcXVvdGVkLgoKICAgICAgICBUbyBlbmFibGUgdW5jb25kaXRpb25hbCBxdW90aW5nIGZvciB0aGUgdGFibGUgbmFtZSwgc3BlY2lmeSB0aGUgZmxhZwogICAgICAgIGBgcXVvdGU9VHJ1ZWBgIHRvIHRoZSBjb25zdHJ1Y3Rvciwgb3IgdXNlIHRoZSA6Y2xhc3M6YC5xdW90ZWRfbmFtZWAKICAgICAgICBjb25zdHJ1Y3QgdG8gc3BlY2lmeSB0aGUgbmFtZS4KCiAgICA6cGFyYW0gbWV0YWRhdGE6IGEgOmNsYXNzOmAuTWV0YURhdGFgIG9iamVjdCB3aGljaCB3aWxsIGNvbnRhaW4gdGhpcwogICAgICAgIHRhYmxlLiAgVGhlIG1ldGFkYXRhIGlzIHVzZWQgYXMgYSBwb2ludCBvZiBhc3NvY2lhdGlvbiBvZiB0aGlzIHRhYmxlCiAgICAgICAgd2l0aCBvdGhlciB0YWJsZXMgd2hpY2ggYXJlIHJlZmVyZW5jZWQgdmlhIGZvcmVpZ24ga2V5LiAgSXQgYWxzbwogICAgICAgIG1heSBiZSB1c2VkIHRvIGFzc29jaWF0ZSB0aGlzIHRhYmxlIHdpdGggYSBwYXJ0aWN1bGFyCiAgICAgICAgOmNsYXNzOmAuQ29ubmVjdGFibGVgLgoKICAgIDpwYXJhbSBcKmFyZ3M6IEFkZGl0aW9uYWwgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlIHVzZWQgcHJpbWFyaWx5CiAgICAgICAgdG8gYWRkIHRoZSBsaXN0IG9mIDpjbGFzczpgLkNvbHVtbmAgb2JqZWN0cyBjb250YWluZWQgd2l0aGluIHRoaXMKICAgICAgICB0YWJsZS4gU2ltaWxhciB0byB0aGUgc3R5bGUgb2YgYSBDUkVBVEUgVEFCTEUgc3RhdGVtZW50LCBvdGhlcgogICAgICAgIDpjbGFzczpgLlNjaGVtYUl0ZW1gIGNvbnN0cnVjdHMgbWF5IGJlIGFkZGVkIGhlcmUsIGluY2x1ZGluZwogICAgICAgIDpjbGFzczpgLlByaW1hcnlLZXlDb25zdHJhaW50YCwgYW5kIDpjbGFzczpgLkZvcmVpZ25LZXlDb25zdHJhaW50YC4KCiAgICA6cGFyYW0gYXV0b2xvYWQ6IERlZmF1bHRzIHRvIEZhbHNlLCB1bmxlc3MgOnBhcmFtcmVmOmAuVGFibGUuYXV0b2xvYWRfd2l0aGAKICAgICAgICBpcyBzZXQgaW4gd2hpY2ggY2FzZSBpdCBkZWZhdWx0cyB0byBUcnVlOyA6Y2xhc3M6YC5Db2x1bW5gIG9iamVjdHMKICAgICAgICBmb3IgdGhpcyB0YWJsZSBzaG91bGQgYmUgcmVmbGVjdGVkIGZyb20gdGhlIGRhdGFiYXNlLCBwb3NzaWJseQogICAgICAgIGF1Z21lbnRpbmcgb3IgcmVwbGFjaW5nIGV4aXN0aW5nIDpjbGFzczpgLkNvbHVtbmAgb2JqZWN0cyB0aGF0IHdlcmUKICAgICAgICBleHBsaWNpdGx5IHNwZWNpZmllZC4KCiAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAxLjAuMCBzZXR0aW5nIHRoZSA6cGFyYW1yZWY6YC5UYWJsZS5hdXRvbG9hZF93aXRoYAogICAgICAgICAgIHBhcmFtZXRlciBpbXBsaWVzIHRoYXQgOnBhcmFtcmVmOmAuVGFibGUuYXV0b2xvYWRgIHdpbGwgZGVmYXVsdAogICAgICAgICAgIHRvIFRydWUuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnJlZjpgbWV0YWRhdGFfcmVmbGVjdGlvbl90b3BsZXZlbGAKCiAgICA6cGFyYW0gYXV0b2xvYWRfcmVwbGFjZTogRGVmYXVsdHMgdG8gYGBUcnVlYGA7IHdoZW4gdXNpbmcKICAgICAgICA6cGFyYW1yZWY6YC5UYWJsZS5hdXRvbG9hZGAKICAgICAgICBpbiBjb25qdW5jdGlvbiB3aXRoIDpwYXJhbXJlZjpgLlRhYmxlLmV4dGVuZF9leGlzdGluZ2AsIGluZGljYXRlcwogICAgICAgIHRoYXQgOmNsYXNzOmAuQ29sdW1uYCBvYmplY3RzIHByZXNlbnQgaW4gdGhlIGFscmVhZHktZXhpc3RpbmcKICAgICAgICA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0IHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGNvbHVtbnMgb2YgdGhlIHNhbWUKICAgICAgICBuYW1lIHJldHJpZXZlZCBmcm9tIHRoZSBhdXRvbG9hZCBwcm9jZXNzLiAgIFdoZW4gYGBGYWxzZWBgLCBjb2x1bW5zCiAgICAgICAgYWxyZWFkeSBwcmVzZW50IHVuZGVyIGV4aXN0aW5nIG5hbWVzIHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZQogICAgICAgIHJlZmxlY3Rpb24gcHJvY2Vzcy4KCiAgICAgICAgTm90ZSB0aGF0IHRoaXMgc2V0dGluZyBkb2VzIG5vdCBpbXBhY3QgOmNsYXNzOmAuQ29sdW1uYCBvYmplY3RzCiAgICAgICAgc3BlY2lmaWVkIHByb2dyYW1tYXRpY2FsbHkgd2l0aGluIHRoZSBjYWxsIHRvIDpjbGFzczpgLlRhYmxlYCB0aGF0CiAgICAgICAgYWxzbyBpcyBhdXRvbG9hZGluZzsgdGhvc2UgOmNsYXNzOmAuQ29sdW1uYCBvYmplY3RzIHdpbGwgYWx3YXlzCiAgICAgICAgcmVwbGFjZSBleGlzdGluZyBjb2x1bW5zIG9mIHRoZSBzYW1lIG5hbWUgd2hlbgogICAgICAgIDpwYXJhbXJlZjpgLlRhYmxlLmV4dGVuZF9leGlzdGluZ2AgaXMgYGBUcnVlYGAuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnBhcmFtcmVmOmAuVGFibGUuYXV0b2xvYWRgCgogICAgICAgICAgICA6cGFyYW1yZWY6YC5UYWJsZS5leHRlbmRfZXhpc3RpbmdgCgogICAgOnBhcmFtIGF1dG9sb2FkX3dpdGg6IEFuIDpjbGFzczpgLkVuZ2luZWAgb3IgOmNsYXNzOmAuQ29ubmVjdGlvbmAgb2JqZWN0CiAgICAgICAgd2l0aCB3aGljaCB0aGlzIDpjbGFzczpgLlRhYmxlYCBvYmplY3Qgd2lsbCBiZSByZWZsZWN0ZWQ7IHdoZW4KICAgICAgICBzZXQgdG8gYSBub24tTm9uZSB2YWx1ZSwgaXQgaW1wbGllcyB0aGF0IDpwYXJhbXJlZjpgLlRhYmxlLmF1dG9sb2FkYAogICAgICAgIGlzIGBgVHJ1ZWBgLiAgIElmIGxlZnQgdW5zZXQsIGJ1dCA6cGFyYW1yZWY6YC5UYWJsZS5hdXRvbG9hZGAgaXMKICAgICAgICBleHBsaWNpdGx5IHNldCB0byBgYFRydWVgYCwgYW4gYXV0b2xvYWQgb3BlcmF0aW9uIHdpbGwgYXR0ZW1wdCB0bwogICAgICAgIHByb2NlZWQgYnkgbG9jYXRpbmcgYW4gOmNsYXNzOmAuRW5naW5lYCBvciA6Y2xhc3M6YC5Db25uZWN0aW9uYCBib3VuZAogICAgICAgIHRvIHRoZSB1bmRlcmx5aW5nIDpjbGFzczpgLk1ldGFEYXRhYCBvYmplY3QuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnBhcmFtcmVmOmAuVGFibGUuYXV0b2xvYWRgCgogICAgOnBhcmFtIGV4dGVuZF9leGlzdGluZzogV2hlbiBgYFRydWVgYCwgaW5kaWNhdGVzIHRoYXQgaWYgdGhpcwogICAgICAgIDpjbGFzczpgLlRhYmxlYCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGdpdmVuIDpjbGFzczpgLk1ldGFEYXRhYCwKICAgICAgICBhcHBseSBmdXJ0aGVyIGFyZ3VtZW50cyB3aXRoaW4gdGhlIGNvbnN0cnVjdG9yIHRvIHRoZSBleGlzdGluZwogICAgICAgIDpjbGFzczpgLlRhYmxlYC4KCiAgICAgICAgSWYgOnBhcmFtcmVmOmAuVGFibGUuZXh0ZW5kX2V4aXN0aW5nYCBvcgogICAgICAgIDpwYXJhbXJlZjpgLlRhYmxlLmtlZXBfZXhpc3RpbmdgIGFyZSBub3Qgc2V0LCBhbmQgdGhlIGdpdmVuIG5hbWUKICAgICAgICBvZiB0aGUgbmV3IDpjbGFzczpgLlRhYmxlYCByZWZlcnMgdG8gYSA6Y2xhc3M6YC5UYWJsZWAgdGhhdCBpcwogICAgICAgIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdGFyZ2V0IDpjbGFzczpgLk1ldGFEYXRhYCBjb2xsZWN0aW9uLCBhbmQKICAgICAgICB0aGlzIDpjbGFzczpgLlRhYmxlYCBzcGVjaWZpZXMgYWRkaXRpb25hbCBjb2x1bW5zIG9yIG90aGVyIGNvbnN0cnVjdHMKICAgICAgICBvciBmbGFncyB0aGF0IG1vZGlmeSB0aGUgdGFibGUncyBzdGF0ZSwgYW4KICAgICAgICBlcnJvciBpcyByYWlzZWQuICBUaGUgcHVycG9zZSBvZiB0aGVzZSB0d28gbXV0dWFsbHktZXhjbHVzaXZlIGZsYWdzCiAgICAgICAgaXMgdG8gc3BlY2lmeSB3aGF0IGFjdGlvbiBzaG91bGQgYmUgdGFrZW4gd2hlbiBhIDpjbGFzczpgLlRhYmxlYAogICAgICAgIGlzIHNwZWNpZmllZCB0aGF0IG1hdGNoZXMgYW4gZXhpc3RpbmcgOmNsYXNzOmAuVGFibGVgLCB5ZXQgc3BlY2lmaWVzCiAgICAgICAgYWRkaXRpb25hbCBjb25zdHJ1Y3RzLgoKICAgICAgICA6cGFyYW1yZWY6YC5UYWJsZS5leHRlbmRfZXhpc3RpbmdgIHdpbGwgYWxzbyB3b3JrIGluIGNvbmp1bmN0aW9uCiAgICAgICAgd2l0aCA6cGFyYW1yZWY6YC5UYWJsZS5hdXRvbG9hZGAgdG8gcnVuIGEgbmV3IHJlZmxlY3Rpb24KICAgICAgICBvcGVyYXRpb24gYWdhaW5zdCB0aGUgZGF0YWJhc2UsIGV2ZW4gaWYgYSA6Y2xhc3M6YC5UYWJsZWAKICAgICAgICBvZiB0aGUgc2FtZSBuYW1lIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdGFyZ2V0CiAgICAgICAgOmNsYXNzOmAuTWV0YURhdGFgOyBuZXdseSByZWZsZWN0ZWQgOmNsYXNzOmAuQ29sdW1uYCBvYmplY3RzCiAgICAgICAgYW5kIG90aGVyIG9wdGlvbnMgd2lsbCBiZSBhZGRlZCBpbnRvIHRoZSBzdGF0ZSBvZiB0aGUKICAgICAgICA6Y2xhc3M6YC5UYWJsZWAsIHBvdGVudGlhbGx5IG92ZXJ3cml0aW5nIGV4aXN0aW5nIGNvbHVtbnMKICAgICAgICBhbmQgb3B0aW9ucyBvZiB0aGUgc2FtZSBuYW1lLgoKICAgICAgICBBcyBpcyBhbHdheXMgdGhlIGNhc2Ugd2l0aCA6cGFyYW1yZWY6YC5UYWJsZS5hdXRvbG9hZGAsCiAgICAgICAgOmNsYXNzOmAuQ29sdW1uYCBvYmplY3RzIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgOmNsYXNzOmAuVGFibGVgCiAgICAgICAgY29uc3RydWN0b3IsIHdoaWNoIHdpbGwgdGFrZSBwcmVjZWRlbmNlLiAgQmVsb3csIHRoZSBleGlzdGluZwogICAgICAgIHRhYmxlIGBgbXl0YWJsZWBgIHdpbGwgYmUgYXVnbWVudGVkIHdpdGggOmNsYXNzOmAuQ29sdW1uYCBvYmplY3RzCiAgICAgICAgYm90aCByZWZsZWN0ZWQgZnJvbSB0aGUgZGF0YWJhc2UsIGFzIHdlbGwgYXMgdGhlIGdpdmVuIDpjbGFzczpgLkNvbHVtbmAKICAgICAgICBuYW1lZCAieSI6OgoKICAgICAgICAgICAgVGFibGUoIm15dGFibGUiLCBtZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCd5JywgSW50ZWdlciksCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZF9leGlzdGluZz1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICBhdXRvbG9hZD1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICBhdXRvbG9hZF93aXRoPWVuZ2luZQogICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6cGFyYW1yZWY6YC5UYWJsZS5hdXRvbG9hZGAKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgLlRhYmxlLmF1dG9sb2FkX3JlcGxhY2VgCgogICAgICAgICAgICA6cGFyYW1yZWY6YC5UYWJsZS5rZWVwX2V4aXN0aW5nYAoKCiAgICA6cGFyYW0gaW1wbGljaXRfcmV0dXJuaW5nOiBUcnVlIGJ5IGRlZmF1bHQgLSBpbmRpY2F0ZXMgdGhhdAogICAgICAgIFJFVFVSTklORyBjYW4gYmUgdXNlZCBieSBkZWZhdWx0IHRvIGZldGNoIG5ld2x5IGluc2VydGVkIHByaW1hcnkga2V5CiAgICAgICAgdmFsdWVzLCBmb3IgYmFja2VuZHMgd2hpY2ggc3VwcG9ydCB0aGlzLiAgTm90ZSB0aGF0CiAgICAgICAgY3JlYXRlX2VuZ2luZSgpIGFsc28gcHJvdmlkZXMgYW4gaW1wbGljaXRfcmV0dXJuaW5nIGZsYWcuCgogICAgOnBhcmFtIGluY2x1ZGVfY29sdW1uczogQSBsaXN0IG9mIHN0cmluZ3MgaW5kaWNhdGluZyBhIHN1YnNldCBvZgogICAgICAgIGNvbHVtbnMgdG8gYmUgbG9hZGVkIHZpYSB0aGUgYGBhdXRvbG9hZGBgIG9wZXJhdGlvbjsgdGFibGUgY29sdW1ucyB3aG8KICAgICAgICBhcmVuJ3QgcHJlc2VudCBpbiB0aGlzIGxpc3Qgd2lsbCBub3QgYmUgcmVwcmVzZW50ZWQgb24gdGhlIHJlc3VsdGluZwogICAgICAgIGBgVGFibGVgYCBvYmplY3QuIERlZmF1bHRzIHRvIGBgTm9uZWBgIHdoaWNoIGluZGljYXRlcyBhbGwgY29sdW1ucwogICAgICAgIHNob3VsZCBiZSByZWZsZWN0ZWQuCgogICAgOnBhcmFtIHJlc29sdmVfZmtzOiBXaGV0aGVyIG9yIG5vdCB0byByZWZsZWN0IDpjbGFzczpgLlRhYmxlYCBvYmplY3RzCiAgICAgICAgcmVsYXRlZCB0byB0aGlzIG9uZSB2aWEgOmNsYXNzOmAuRm9yZWlnbktleWAgb2JqZWN0cywgd2hlbgogICAgICAgIDpwYXJhbXJlZjpgLlRhYmxlLmF1dG9sb2FkYCBvciA6cGFyYW1yZWY6YC5UYWJsZS5hdXRvbG9hZF93aXRoYCBpcwogICAgICAgIHNwZWNpZmllZC4gICBEZWZhdWx0cyB0byBUcnVlLiAgU2V0IHRvIEZhbHNlIHRvIGRpc2FibGUgcmVmbGVjdGlvbiBvZgogICAgICAgIHJlbGF0ZWQgdGFibGVzIGFzIDpjbGFzczpgLkZvcmVpZ25LZXlgIG9iamVjdHMgYXJlIGVuY291bnRlcmVkOyBtYXkgYmUKICAgICAgICB1c2VkIGVpdGhlciB0byBzYXZlIG9uIFNRTCBjYWxscyBvciB0byBhdm9pZCBpc3N1ZXMgd2l0aCByZWxhdGVkIHRhYmxlcwogICAgICAgIHRoYXQgY2FuJ3QgYmUgYWNjZXNzZWQuIE5vdGUgdGhhdCBpZiBhIHJlbGF0ZWQgdGFibGUgaXMgYWxyZWFkeSBwcmVzZW50CiAgICAgICAgaW4gdGhlIDpjbGFzczpgLk1ldGFEYXRhYCBjb2xsZWN0aW9uLCBvciBiZWNvbWVzIHByZXNlbnQgbGF0ZXIsIGEKICAgICAgICA6Y2xhc3M6YC5Gb3JlaWduS2V5YCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgOmNsYXNzOmAuVGFibGVgIHdpbGwKICAgICAgICByZXNvbHZlIHRvIHRoYXQgdGFibGUgbm9ybWFsbHkuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMwoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgLk1ldGFEYXRhLnJlZmxlY3QucmVzb2x2ZV9ma3NgCgoKICAgIDpwYXJhbSBpbmZvOiBPcHRpb25hbCBkYXRhIGRpY3Rpb25hcnkgd2hpY2ggd2lsbCBiZSBwb3B1bGF0ZWQgaW50byB0aGUKICAgICAgICA6YXR0cjpgLlNjaGVtYUl0ZW0uaW5mb2AgYXR0cmlidXRlIG9mIHRoaXMgb2JqZWN0LgoKICAgIDpwYXJhbSBrZWVwX2V4aXN0aW5nOiBXaGVuIGBgVHJ1ZWBgLCBpbmRpY2F0ZXMgdGhhdCBpZiB0aGlzIFRhYmxlCiAgICAgICAgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBnaXZlbiA6Y2xhc3M6YC5NZXRhRGF0YWAsIGlnbm9yZQogICAgICAgIGZ1cnRoZXIgYXJndW1lbnRzIHdpdGhpbiB0aGUgY29uc3RydWN0b3IgdG8gdGhlIGV4aXN0aW5nCiAgICAgICAgOmNsYXNzOmAuVGFibGVgLCBhbmQgcmV0dXJuIHRoZSA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0IGFzCiAgICAgICAgb3JpZ2luYWxseSBjcmVhdGVkLiBUaGlzIGlzIHRvIGFsbG93IGEgZnVuY3Rpb24gdGhhdCB3aXNoZXMKICAgICAgICB0byBkZWZpbmUgYSBuZXcgOmNsYXNzOmAuVGFibGVgIG9uIGZpcnN0IGNhbGwsIGJ1dCBvbgogICAgICAgIHN1YnNlcXVlbnQgY2FsbHMgd2lsbCByZXR1cm4gdGhlIHNhbWUgOmNsYXNzOmAuVGFibGVgLAogICAgICAgIHdpdGhvdXQgYW55IG9mIHRoZSBkZWNsYXJhdGlvbnMgKHBhcnRpY3VsYXJseSBjb25zdHJhaW50cykKICAgICAgICBiZWluZyBhcHBsaWVkIGEgc2Vjb25kIHRpbWUuCgogICAgICAgIElmIDpwYXJhbXJlZjpgLlRhYmxlLmV4dGVuZF9leGlzdGluZ2Agb3IKICAgICAgICA6cGFyYW1yZWY6YC5UYWJsZS5rZWVwX2V4aXN0aW5nYCBhcmUgbm90IHNldCwgYW5kIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgb2YgdGhlIG5ldyA6Y2xhc3M6YC5UYWJsZWAgcmVmZXJzIHRvIGEgOmNsYXNzOmAuVGFibGVgIHRoYXQgaXMKICAgICAgICBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHRhcmdldCA6Y2xhc3M6YC5NZXRhRGF0YWAgY29sbGVjdGlvbiwgYW5kCiAgICAgICAgdGhpcyA6Y2xhc3M6YC5UYWJsZWAgc3BlY2lmaWVzIGFkZGl0aW9uYWwgY29sdW1ucyBvciBvdGhlciBjb25zdHJ1Y3RzCiAgICAgICAgb3IgZmxhZ3MgdGhhdCBtb2RpZnkgdGhlIHRhYmxlJ3Mgc3RhdGUsIGFuCiAgICAgICAgZXJyb3IgaXMgcmFpc2VkLiAgVGhlIHB1cnBvc2Ugb2YgdGhlc2UgdHdvIG11dHVhbGx5LWV4Y2x1c2l2ZSBmbGFncwogICAgICAgIGlzIHRvIHNwZWNpZnkgd2hhdCBhY3Rpb24gc2hvdWxkIGJlIHRha2VuIHdoZW4gYSA6Y2xhc3M6YC5UYWJsZWAKICAgICAgICBpcyBzcGVjaWZpZWQgdGhhdCBtYXRjaGVzIGFuIGV4aXN0aW5nIDpjbGFzczpgLlRhYmxlYCwgeWV0IHNwZWNpZmllcwogICAgICAgIGFkZGl0aW9uYWwgY29uc3RydWN0cy4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6cGFyYW1yZWY6YC5UYWJsZS5leHRlbmRfZXhpc3RpbmdgCgogICAgOnBhcmFtIGxpc3RlbmVyczogQSBsaXN0IG9mIHR1cGxlcyBvZiB0aGUgZm9ybSBgYCg8ZXZlbnRuYW1lPiwgPGZuPilgYAogICAgICAgIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIDpmdW5jOmAuZXZlbnQubGlzdGVuYCB1cG9uIGNvbnN0cnVjdGlvbi4KICAgICAgICBUaGlzIGFsdGVybmF0ZSBob29rIHRvIDpmdW5jOmAuZXZlbnQubGlzdGVuYCBhbGxvd3MgdGhlIGVzdGFibGlzaG1lbnQKICAgICAgICBvZiBhIGxpc3RlbmVyIGZ1bmN0aW9uIHNwZWNpZmljIHRvIHRoaXMgOmNsYXNzOmAuVGFibGVgIGJlZm9yZQogICAgICAgIHRoZSAiYXV0b2xvYWQiIHByb2Nlc3MgYmVnaW5zLiAgUGFydGljdWxhcmx5IHVzZWZ1bCBmb3IKICAgICAgICB0aGUgOm1ldGg6YC5ERExFdmVudHMuY29sdW1uX3JlZmxlY3RgIGV2ZW50OjoKCiAgICAgICAgICAgIGRlZiBsaXN0ZW5fZm9yX3JlZmxlY3QodGFibGUsIGNvbHVtbl9pbmZvKToKICAgICAgICAgICAgICAgICJoYW5kbGUgdGhlIGNvbHVtbiByZWZsZWN0aW9uIGV2ZW50IgogICAgICAgICAgICAgICAgIyAuLi4KCiAgICAgICAgICAgIHQgPSBUYWJsZSgKICAgICAgICAgICAgICAgICdzb21ldGFibGUnLAogICAgICAgICAgICAgICAgYXV0b2xvYWQ9VHJ1ZSwKICAgICAgICAgICAgICAgIGxpc3RlbmVycz1bCiAgICAgICAgICAgICAgICAgICAgKCdjb2x1bW5fcmVmbGVjdCcsIGxpc3Rlbl9mb3JfcmVmbGVjdCkKICAgICAgICAgICAgICAgIF0pCgogICAgOnBhcmFtIG11c3RleGlzdDogV2hlbiBgYFRydWVgYCwgaW5kaWNhdGVzIHRoYXQgdGhpcyBUYWJsZSBtdXN0IGFscmVhZHkKICAgICAgICBiZSBwcmVzZW50IGluIHRoZSBnaXZlbiA6Y2xhc3M6YC5NZXRhRGF0YWAgY29sbGVjdGlvbiwgZWxzZQogICAgICAgIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQuCgogICAgOnBhcmFtIHByZWZpeGVzOgogICAgICAgIEEgbGlzdCBvZiBzdHJpbmdzIHRvIGluc2VydCBhZnRlciBDUkVBVEUgaW4gdGhlIENSRUFURSBUQUJMRQogICAgICAgIHN0YXRlbWVudC4gIFRoZXkgd2lsbCBiZSBzZXBhcmF0ZWQgYnkgc3BhY2VzLgoKICAgIDpwYXJhbSBxdW90ZTogRm9yY2UgcXVvdGluZyBvZiB0aGlzIHRhYmxlJ3MgbmFtZSBvbiBvciBvZmYsIGNvcnJlc3BvbmRpbmcKICAgICAgICB0byBgYFRydWVgYCBvciBgYEZhbHNlYGAuICBXaGVuIGxlZnQgYXQgaXRzIGRlZmF1bHQgb2YgYGBOb25lYGAsCiAgICAgICAgdGhlIGNvbHVtbiBpZGVudGlmaWVyIHdpbGwgYmUgcXVvdGVkIGFjY29yZGluZyB0byB3aGV0aGVyIHRoZSBuYW1lIGlzCiAgICAgICAgY2FzZSBzZW5zaXRpdmUgKGlkZW50aWZpZXJzIHdpdGggYXQgbGVhc3Qgb25lIHVwcGVyIGNhc2UgY2hhcmFjdGVyIGFyZQogICAgICAgIHRyZWF0ZWQgYXMgY2FzZSBzZW5zaXRpdmUpLCBvciBpZiBpdCdzIGEgcmVzZXJ2ZWQgd29yZC4gIFRoaXMgZmxhZwogICAgICAgIGlzIG9ubHkgbmVlZGVkIHRvIGZvcmNlIHF1b3Rpbmcgb2YgYSByZXNlcnZlZCB3b3JkIHdoaWNoIGlzIG5vdCBrbm93bgogICAgICAgIGJ5IHRoZSBTUUxBbGNoZW15IGRpYWxlY3QuCgogICAgOnBhcmFtIHF1b3RlX3NjaGVtYTogc2FtZSBhcyAncXVvdGUnIGJ1dCBhcHBsaWVzIHRvIHRoZSBzY2hlbWEgaWRlbnRpZmllci4KCiAgICA6cGFyYW0gc2NoZW1hOiBUaGUgc2NoZW1hIG5hbWUgZm9yIHRoaXMgdGFibGUsIHdoaWNoIGlzIHJlcXVpcmVkIGlmCiAgICAgICAgdGhlIHRhYmxlIHJlc2lkZXMgaW4gYSBzY2hlbWEgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzY2hlbWEKICAgICAgICBmb3IgdGhlIGVuZ2luZSdzIGRhdGFiYXNlIGNvbm5lY3Rpb24uICBEZWZhdWx0cyB0byBgYE5vbmVgYC4KCiAgICAgICAgSWYgdGhlIG93bmluZyA6Y2xhc3M6YC5NZXRhRGF0YWAgb2YgdGhpcyA6Y2xhc3M6YC5UYWJsZWAgc3BlY2lmaWVzIGl0cwogICAgICAgIG93biA6cGFyYW1yZWY6YC5NZXRhRGF0YS5zY2hlbWFgIHBhcmFtZXRlciwgdGhlbiB0aGF0IHNjaGVtYSBuYW1lIHdpbGwKICAgICAgICBiZSBhcHBsaWVkIHRvIHRoaXMgOmNsYXNzOmAuVGFibGVgIGlmIHRoZSBzY2hlbWEgcGFyYW1ldGVyIGhlcmUgaXMgc2V0CiAgICAgICAgdG8gYGBOb25lYGAuICBUbyBzZXQgYSBibGFuayBzY2hlbWEgbmFtZSBvbiBhIDpjbGFzczpgLlRhYmxlYCB0aGF0CiAgICAgICAgd291bGQgb3RoZXJ3aXNlIHVzZSB0aGUgc2NoZW1hIHNldCBvbiB0aGUgb3duaW5nIDpjbGFzczpgLk1ldGFEYXRhYCwKICAgICAgICBzcGVjaWZ5IHRoZSBzcGVjaWFsIHN5bWJvbCA6YXR0cjpgLkJMQU5LX1NDSEVNQWAuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMC4xNCAgQWRkZWQgdGhlIDphdHRyOmAuQkxBTktfU0NIRU1BYCBzeW1ib2wgdG8KICAgICAgICAgICBhbGxvdyBhIDpjbGFzczpgLlRhYmxlYCB0byBoYXZlIGEgYmxhbmsgc2NoZW1hIG5hbWUgZXZlbiB3aGVuIHRoZQogICAgICAgICAgIHBhcmVudCA6Y2xhc3M6YC5NZXRhRGF0YWAgc3BlY2lmaWVzIDpwYXJhbXJlZjpgLk1ldGFEYXRhLnNjaGVtYWAuCgogICAgICAgIFRoZSBxdW90aW5nIHJ1bGVzIGZvciB0aGUgc2NoZW1hIG5hbWUgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvciB0aGUKICAgICAgICBgYG5hbWVgYCBwYXJhbWV0ZXIsIGluIHRoYXQgcXVvdGluZyBpcyBhcHBsaWVkIGZvciByZXNlcnZlZCB3b3JkcyBvcgogICAgICAgIGNhc2Utc2Vuc2l0aXZlIG5hbWVzOyB0byBlbmFibGUgdW5jb25kaXRpb25hbCBxdW90aW5nIGZvciB0aGUgc2NoZW1hCiAgICAgICAgbmFtZSwgc3BlY2lmeSB0aGUgZmxhZyBgYHF1b3RlX3NjaGVtYT1UcnVlYGAgdG8gdGhlIGNvbnN0cnVjdG9yLCBvciB1c2UKICAgICAgICB0aGUgOmNsYXNzOmAucXVvdGVkX25hbWVgIGNvbnN0cnVjdCB0byBzcGVjaWZ5IHRoZSBuYW1lLgoKICAgIDpwYXJhbSB1c2VleGlzdGluZzogdGhlIHNhbWUgYXMgOnBhcmFtcmVmOmAuVGFibGUuZXh0ZW5kX2V4aXN0aW5nYC4KCiAgICA6cGFyYW0gY29tbWVudDogT3B0aW9uYWwgc3RyaW5nIHRoYXQgd2lsbCByZW5kZXIgYW4gU1FMIGNvbW1lbnQgb24gdGFibGUKICAgICAgICAgY3JlYXRpb24uCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIgQWRkZWQgdGhlIDpwYXJhbXJlZjpgLlRhYmxlLmNvbW1lbnRgIHBhcmFtZXRlcgogICAgICAgICAgICB0byA6Y2xhc3M6YC5UYWJsZWAuCgogICAgOnBhcmFtIFwqKmt3OiBBZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIG5vdCBtZW50aW9uZWQgYWJvdmUgYXJlCiAgICAgICAgZGlhbGVjdCBzcGVjaWZpYywgYW5kIHBhc3NlZCBpbiB0aGUgZm9ybSBgYDxkaWFsZWN0bmFtZT5fPGFyZ25hbWU+YGAuCiAgICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIHJlZ2FyZGluZyBhbiBpbmRpdmlkdWFsIGRpYWxlY3QgYXQKICAgICAgICA6cmVmOmBkaWFsZWN0X3RvcGxldmVsYCBmb3IgZGV0YWlsIG9uIGRvY3VtZW50ZWQgYXJndW1lbnRzLgoKICAgIHIhAAAAKQJ6AzAuN3qTVGhlIDpwYXJhbXJlZjpgLlRhYmxlLnVzZWV4aXN0aW5nYCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuICBQbGVhc2UgdXNlIDpwYXJhbXJlZjpgLlRhYmxlLmV4dGVuZF9leGlzdGluZ2AuKQHaC3VzZWV4aXN0aW5nYwEAAAAAAAAADAAAAAwAAABPAAAAc8QBAAB8AXMOdACgAXwAoQFTAHkkfAFkARkAfAFkAhkAfAFkA2QAhQIZAAMAAgB9A30EfQFXAG4cBAB0AmsKck4BAAEAAQB0A2QEgwGCAVkAbgJYAHwCoARkBWQAoQJ9BXwFZABrCHJsfARqBX0Fbgx8BXQGawhyeGQAfQV8AqAHZAZkB6ECfQZ8AqAHZAhkB6ECfQdkCXwCawZytnwHcqpkCn0IdAigCXwIoQGCAXwCoAdkCWQHoQJ9B3wGcsx8B3LMZAt9CHQIoAl8CKEBggF8AqAHZAxkB6ECfQl0CnwDfAWDAn0KfAp8BGoLawaQAXIyfAaQAXMSfAeQAXMSdAx8AYMBkAFyEnQIoA1kDXwKFgChAYIBfARqC3wKGQB9C3wHkAFyLnwLag58AXwCjgEBAHwLUwB8CZABckZ0CKANZA58ChYAoQGCAXQAoAF8AKEBfQt8C2oPoBB8C3wEoQIBAHwEoBF8A3wFfAuhAwEAeSZ8C2oSfAN8BGYCfAGeAnwCjgEBAHwLag+gE3wLfAShAgEAfAtTAAEAAQABAHQUoBWhAI8SAQB8BKAWfAN8BaECAQBXAGQAUQBSAFgAWQBuAlgAZABTACkPTnIBAAAAcgMAAAByFAAAAHokVGFibGUoKSB0YWtlcyBhdCBsZWFzdCB0d28gYXJndW1lbnRzchwAAADaDWtlZXBfZXhpc3RpbmdG2g9leHRlbmRfZXhpc3RpbmdyRwAAAHovdXNlZXhpc3RpbmcgaXMgc3lub255bW91cyB3aXRoIGV4dGVuZF9leGlzdGluZy56OWtlZXBfZXhpc3RpbmcgYW5kIGV4dGVuZF9leGlzdGluZyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLtoJbXVzdGV4aXN0epZUYWJsZSAnJXMnIGlzIGFscmVhZHkgZGVmaW5lZCBmb3IgdGhpcyBNZXRhRGF0YSBpbnN0YW5jZS4gIFNwZWNpZnkgJ2V4dGVuZF9leGlzdGluZz1UcnVlJyB0byByZWRlZmluZSBvcHRpb25zIGFuZCBjb2x1bW5zIG9uIGFuIGV4aXN0aW5nIFRhYmxlIG9iamVjdC56FlRhYmxlICclcycgbm90IGRlZmluZWQpF9oGb2JqZWN02gdfX25ld19f2gpJbmRleEVycm9y2glUeXBlRXJyb3JyOgAAAHIcAAAA2gxCTEFOS19TQ0hFTUHaA3BvcHIWAAAA2g1Bcmd1bWVudEVycm9ych4AAADaBnRhYmxlc9oEYm9vbNoTSW52YWxpZFJlcXVlc3RFcnJvctoOX2luaXRfZXhpc3RpbmdyOAAAAFoUYmVmb3JlX3BhcmVudF9hdHRhY2jaCl9hZGRfdGFibGXaBV9pbml02hNhZnRlcl9wYXJlbnRfYXR0YWNochgAAABaDHNhZmVfcmVyYWlzZdoNX3JlbW92ZV90YWJsZSkM2gNjbHNyLQAAANoCa3dyGwAAANoIbWV0YWRhdGFyHAAAAHJIAAAAckkAAADaA21zZ3JKAAAAciIAAAByIQAAAHIaAAAAchoAAAByHQAAAHJMAAAAsgEAAHNYAAAAAAkEAgoCAgEkAQ4BDgIMAQgBCAEIAQQBDAEMAQgBBAEEAQoBDAIIAQQBCgIMAQoBDAEWAQQBAgQIAgoBBgEMAQQCBgEOAQoBDgEOAQIBFAEOAQQBBgEKAXoNVGFibGUuX19uZXdfX3oDMC45etZUaGUgOm1ldGg6YC5TY2hlbWFJdGVtLnF1b3RlYCBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuICBVc2UgdGhlIDphdHRyOmAucXVvdGVkX25hbWUucXVvdGVgIGF0dHJpYnV0ZSBvbiB0aGUgYGBzY2hlbWFgYCBmaWVsZCBvZiB0aGUgdGFyZ2V0IHNjaGVtYSBpdGVtIHRvIHJldHJpZXZlIHF1b3RlZCBzdGF0dXMuYwEAAAAAAAAAAQAAAAEAAABDAAAAcwgAAAB8AGoAagFTACkBel5SZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBgYHF1b3RlX3NjaGVtYWBgIGZsYWcgcGFzc2VkCiAgICAgICAgdG8gdGhpcyA6Y2xhc3M6YC5UYWJsZWAuCiAgICAgICAgKQJyHAAAAHI1AAAAKQFyLAAAAHIaAAAAchoAAAByHQAAANoMcXVvdGVfc2NoZW1h8gEAAHMCAAAAAA16ElRhYmxlLnF1b3RlX3NjaGVtYWMBAAAAAAAAAAMAAAABAAAATwAAAHMEAAAAZAFTACkCerxDb25zdHJ1Y3RvciBmb3IgOmNsYXNzOmB+LnNjaGVtYS5UYWJsZWAuCgogICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgbm8tb3AuICAgU2VlIHRoZSB0b3AtbGV2ZWwKICAgICAgICBkb2N1bWVudGF0aW9uIGZvciA6Y2xhc3M6YH4uc2NoZW1hLlRhYmxlYAogICAgICAgIGZvciBjb25zdHJ1Y3RvciBhcmd1bWVudHMuCgogICAgICAgIE5yGgAAACkDciwAAAByLQAAAHJbAAAAchoAAAByGgAAAHIdAAAA2ghfX2luaXRfXwECAABzAgAAAAAHeg5UYWJsZS5fX2luaXRfX2MDAAAAAAAAAA4AAAAIAAAADwAAAHPGAQAAdAB0AXwAgwKgAnQDfAF8BKAEZAFkAKECgwKhAQEAfAJ8AF8FfASgBGQCZAChAnwAXwZ8AGoGZABrCHJGfAJqBnwAXwZuLHwAagZ0B2sIclhkAHwAXwZuGnwEoARkA2QAoQJ9BXQDfABqBnwFgwJ8AF8GdAiDAHwAXwl0CIMAfABfCnQLgwB8AF8MdA1kBGQFjQGgDnwAoQEBAHQIgwB8AF8PdAiDAHwAXxB8AGoGZABrCXLIZAZ8AGoGfABqEWYCFgB8AF8Sbgh8AGoRfABfEnwEoARkB2QAoQJ9BnwEoARkCHwGZABrCaECfQd8BKAEZAlkBKECAQB8BKAEZApkAKECfQh8BKAEZAtkBKECfQl8BKAEZAxkAKECfQp8BKAEZA1kBKECfABfE3wEoARkDmQAoQJ8AF8UZA98BGsGkAFyTnwEoARkD6EBfABfFWQQfARrBpABcoR8BKAEZBChAX0LeCB8C0QAXRhcAn0MfQ10FqAXfAB8DHwNoQMBAJABcWhXAHwEoARkEWcAoQJ8AF8YfABqGWYAfASOAQEAfAeQAXK4fABqGnwCfAZ8CnwIfAlkEo0FAQB8AGobfAOOAAEAZABTACkTTnI1AAAAchwAAAByXgAAAFQpAdoTX2ltcGxpY2l0X2dlbmVyYXRlZHoFJXMuJXPaDWF1dG9sb2FkX3dpdGjaCGF1dG9sb2Fk2hBhdXRvbG9hZF9yZXBsYWNl2gpfZXh0ZW5kX29u2gtyZXNvbHZlX2Zrc9oPaW5jbHVkZV9jb2x1bW5z2hJpbXBsaWNpdF9yZXR1cm5pbmfaB2NvbW1lbnRyMgAAANoJbGlzdGVuZXJz2ghwcmVmaXhlcykCcmQAAAByZQAAACkc2gVzdXBlcnJGAAAAcl8AAAByEQAAAHJQAAAAclwAAAByHAAAAHJPAAAA2gNzZXTaB2luZGV4ZXPaC2NvbnN0cmFpbnRzcggAAADaCF9jb2x1bW5z2hRQcmltYXJ5S2V5Q29uc3RyYWludHIrAAAA2gxmb3JlaWduX2tleXPaE19leHRyYV9kZXBlbmRlbmNpZXNyGwAAANoIZnVsbG5hbWVyZwAAAHJoAAAAcjIAAAByFQAAANoGbGlzdGVuWglfcHJlZml4ZXPaDV9leHRyYV9rd2FyZ3PaCV9hdXRvbG9hZHIvAAAAKQ5yLAAAAHIbAAAAclwAAAByLQAAAHIwAAAAcl4AAAByYQAAAHJiAAAAcmQAAAByZQAAAHJmAAAAcmkAAADaA2V2dNoCZm4pAdoJX19jbGFzc19fchoAAAByHQAAAHJXAAAADAIAAHNaAAAAAAEKARQCBgIOAQoBCgEKAQgCDAEOAggBCAEIAQIBCAEGAQgBCAEKARQCCAIMARACDAEMAgwBDAIOAg4CCgEMAQoBCgEOARQCDgIMBQYBBAECAQIBAgECAQgFegtUYWJsZS5faW5pdHIaAAAAVE5jBwAAAAAAAAAIAAAACAAAAEMAAABzSgAAAHwCciB8AmoAfAJqAWoCfAB8A3wEfAV8BmQBjQYBAG4mdAN8AWQCZAONAn0HfAdqAHwHagFqAnwAfAN8BHwFfAZkAY0GAQBkAFMAKQROKQFyZAAAAHqwTm8gZW5naW5lIGlzIGJvdW5kIHRvIHRoaXMgVGFibGUncyBNZXRhRGF0YS4gUGFzcyBhbiBlbmdpbmUgdG8gdGhlIFRhYmxlIHZpYSBhdXRvbG9hZF93aXRoPTxzb21lZW5naW5lPiwgb3IgYXNzb2NpYXRlIHRoZSBNZXRhRGF0YSB3aXRoIGFuIGVuZ2luZSB2aWEgbWV0YWRhdGEuYmluZD08c29tZWVuZ2luZT4pAXJdAAAAKQTaDHJ1bl9jYWxsYWJsZdoHZGlhbGVjdFoMcmVmbGVjdHRhYmxlcgcAAAApCHIsAAAAclwAAAByYQAAAHJmAAAA2g9leGNsdWRlX2NvbHVtbnNyZQAAAHJkAAAA2gRiaW5kchoAAAByGgAAAHIdAAAAcnYAAABQAgAAcyQAAAAACgQBBAEGAQIBAgECAQIBCgMCAQIBCAYEAQYBAgECAQIBAgF6D1RhYmxlLl9hdXRvbG9hZGMBAAAAAAAAAAEAAAAEAAAAQwAAAHMSAAAAdAB8AGoBZAFkAoQAZAONAlMAKQR6VFJldHVybiB0aGUgc2V0IG9mIGNvbnN0cmFpbnRzIGFzIGEgbGlzdCwgc29ydGVkIGJ5IGNyZWF0aW9uCiAgICAgICAgb3JkZXIuCgogICAgICAgIGMBAAAAAAAAAAEAAAABAAAAUwAAAHMGAAAAfABqAFMAKQFOKQFaD19jcmVhdGlvbl9vcmRlcikBciMAAAByGgAAAHIaAAAAch0AAADaCDxsYW1iZGE+ewIAAPMAAAAAeitUYWJsZS5fc29ydGVkX2NvbnN0cmFpbnRzLjxsb2NhbHM+LjxsYW1iZGE+KQFyIgAAACkC2gZzb3J0ZWRybgAAACkBciwAAAByGgAAAHIaAAAAch0AAADaE19zb3J0ZWRfY29uc3RyYWludHN1AgAAcwIAAAAABnoZVGFibGUuX3NvcnRlZF9jb25zdHJhaW50c2MBAAAAAAAAAAEAAAADAAAAQwAAAHMUAAAAdABkAWQChAB8AGoBRACDAYMBUwApA3rvOmNsYXNzOmAuRm9yZWlnbktleUNvbnN0cmFpbnRgIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhpcwogICAgICAgIDpjbGFzczpgLlRhYmxlYC4KCiAgICAgICAgVGhpcyBsaXN0IGlzIHByb2R1Y2VkIGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgOmNsYXNzOmAuRm9yZWlnbktleWAKICAgICAgICBvYmplY3RzIGN1cnJlbnRseSBhc3NvY2lhdGVkLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuMAoKICAgICAgICBjAQAAAAAAAAACAAAAAgAAAHMAAABzFAAAAHwAXQx9AXwBagBWAAEAcQJkAFMAKQFOKQHaCmNvbnN0cmFpbnQpAtoCLjDaA2ZrY3IaAAAAchoAAAByHQAAAPoJPGdlbmV4cHI+iAIAAHMCAAAABAB6MFRhYmxlLmZvcmVpZ25fa2V5X2NvbnN0cmFpbnRzLjxsb2NhbHM+LjxnZW5leHByPikCcmwAAABycQAAACkBciwAAAByGgAAAHIaAAAAch0AAADaF2ZvcmVpZ25fa2V5X2NvbnN0cmFpbnRzfQIAAHMCAAAAAAt6HVRhYmxlLmZvcmVpZ25fa2V5X2NvbnN0cmFpbnRzYwEAAAAAAAAADQAAAAgAAABPAAAAc0QBAAB8AqAAZAFkAKECfQN8AqAAZAJ8A2QAawmhAn0EfAKgAGQDZAShAn0FfAKgAGQFZAChAn0GfAKgAGQGZAChAn0HfAZyYHwGfABqAWsDcmB0AqADZAd8AGoBfAZmAqECggF8AqAAZAhkAKECfQh8AqAAZAlkBKECfQl8CGQAawlypngkfABqBEQAXRp9CnwKagV8CGsHcoh8AGoGoAd8CqEBAQBxiFcAeB5kCkQAXRZ9C3wLfAJrBnKsdAKgA2QLoQGCAXGsVwBkDHwCawZy3HwCoABkDGQAoQJ8AF8IZA18AmsGcvB8AqAAZA2hAXwAXwl8BJABcip8BZABcw5kDmQPhAB8AGoERACDAX0MbgRkEH0MfABqCnwAagt8A3wIfAx8CXwHZBGNBgEAfABqDGYAfAKOAQEAfABqDXwBjgABAGQAUwApEk5yYQAAAHJiAAAAcmMAAABUchwAAAByZAAAAHo3Q2FuJ3QgY2hhbmdlIHNjaGVtYSBvZiBleGlzdGluZyB0YWJsZSBmcm9tICclcycgdG8gJyVzJ3JmAAAAcmUAAAApAnI1AAAAcl4AAAB6MkNhbid0IHJlZGVmaW5lICdxdW90ZScgb3IgJ3F1b3RlX3NjaGVtYScgYXJndW1lbnRzcmgAAAByMgAAAGMBAAAAAAAAAAIAAAADAAAAUwAAAHMSAAAAZwB8AF0KfQF8AWoAkQJxBFMAchoAAAApAXIbAAAAKQJygwAAAHIjAAAAchoAAAByGgAAAHIdAAAA+go8bGlzdGNvbXA+sQIAAHMCAAAABgB6KFRhYmxlLl9pbml0X2V4aXN0aW5nLjxsb2NhbHM+LjxsaXN0Y29tcD5yGgAAACkBcmQAAAApDnJQAAAAchwAAAByFgAAAHJRAAAAciMAAAByGwAAAHJvAAAA2gZyZW1vdmVyaAAAAHIyAAAAcnYAAAByXAAAAHJ1AAAAci8AAAApDXIsAAAAci0AAAByMAAAAHJhAAAAcmIAAAByYwAAAHIcAAAAcmQAAAByZgAAAHJlAAAAciMAAAByIgAAAHJ8AAAAchoAAAByGgAAAHIdAAAAclUAAACKAgAAc0gAAAAAAQwBEAEMAQwBDAIOAQQBAgEMAwwCDAIIAQwBCgEQAgoBCAEEAQoDCAEOAggBDAIGAQYEEgIEAQQBBAECAQIBAgECAQgDDAF6FFRhYmxlLl9pbml0X2V4aXN0aW5nYwEAAAAAAAAAAgAAAAMAAABLAAAAcw4AAAB8AKAAfAGhAQEAZABTACkBTikB2hhfdmFsaWRhdGVfZGlhbGVjdF9rd2FyZ3MpAnIsAAAAcjAAAAByGgAAAHIaAAAAch0AAABydQAAAMACAABzAgAAAAABehNUYWJsZS5fZXh0cmFfa3dhcmdzYwEAAAAAAAAAAQAAAAEAAABDAAAAcwQAAABkAFMAKQFOchoAAAApAXIsAAAAchoAAAByGgAAAHIdAAAA2hFfaW5pdF9jb2xsZWN0aW9uc8MCAABzAgAAAAABehdUYWJsZS5faW5pdF9jb2xsZWN0aW9uc2MBAAAAAAAAAAEAAAABAAAAQwAAAHMEAAAAZABTACkBTnIaAAAAKQFyLAAAAHIaAAAAchoAAAByHQAAANoPX3Jlc2V0X2V4cG9ydGVkxgIAAHMCAAAAAAF6FVRhYmxlLl9yZXNldF9leHBvcnRlZGMBAAAAAAAAAAEAAAABAAAAQwAAAHMIAAAAfABqAGoBUwApAU4pAtoLcHJpbWFyeV9rZXnaFV9hdXRvaW5jcmVtZW50X2NvbHVtbikBciwAAAByGgAAAHIaAAAAch0AAAByjQAAAMkCAABzAgAAAAACehtUYWJsZS5fYXV0b2luY3JlbWVudF9jb2x1bW5jAQAAAAAAAAABAAAAAwAAAEMAAABzDgAAAHQAfABqAXwAagKDAlMAKQFhXwEAAFJldHVybiB0aGUgJ2tleScgZm9yIHRoaXMgOmNsYXNzOmAuVGFibGVgLgoKICAgICAgICBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGRpY3Rpb25hcnkga2V5IHdpdGhpbiB0aGUKICAgICAgICA6YXR0cjpgLk1ldGFEYXRhLnRhYmxlc2AgY29sbGVjdGlvbi4gICBJdCBpcyB0eXBpY2FsbHkgdGhlIHNhbWUKICAgICAgICBhcyB0aGF0IG9mIDphdHRyOmAuVGFibGUubmFtZWAgZm9yIGEgdGFibGUgd2l0aCBubwogICAgICAgIDphdHRyOmAuVGFibGUuc2NoZW1hYCBzZXQ7IG90aGVyd2lzZSBpdCBpcyB0eXBpY2FsbHkgb2YgdGhlIGZvcm0KICAgICAgICBgYHNjaGVtYW5hbWUudGFibGVuYW1lYGAuCgogICAgICAgICkDch4AAAByGwAAAHIcAAAAKQFyLAAAAHIaAAAAchoAAAByHQAAAHIiAAAAzQIAAHMCAAAAAAt6CVRhYmxlLmtleWMBAAAAAAAAAAEAAAAHAAAAAwAAAHNEAAAAZAFkAqAAdAGIAGoCgwFnAXQBiABqA4MBZwEXAGQDZASEAIgAagREAIMBFwCHAGYBZAVkBIQIZAZEAIMBFwChARYAUwApB056CVRhYmxlKCVzKXoCLCBjAQAAAAAAAAACAAAABAAAAFMAAABzFAAAAGcAfABdDH0BdAB8AYMBkQJxBFMAchoAAAApAdoEcmVwcikCcoMAAADaAXhyGgAAAHIaAAAAch0AAAByhwAAAN4CAABzAgAAAAYAeiJUYWJsZS5fX3JlcHJfXy48bG9jYWxzPi48bGlzdGNvbXA+YwEAAAAAAAAAAgAAAAgAAAATAAAAcyIAAABnAHwAXRp9AWQAfAF0AHQBiAB8AYMCgwFmAhYAkQJxBFMAKQF6BSVzPSVzKQJyjgAAANoHZ2V0YXR0cikCcoMAAADaAWspAXIsAAAAchoAAAByHQAAAHKHAAAA3wIAAHMCAAAABgApAXIcAAAAKQXaBGpvaW5yjgAAAHIbAAAAclwAAADaB2NvbHVtbnMpAXIsAAAAchoAAAApAXIsAAAAch0AAAByNAAAANoCAABzBAAAAAABBgR6DlRhYmxlLl9fcmVwcl9fYwEAAAAAAAAAAQAAAAMAAABDAAAAcw4AAAB0AHwAagF8AGoCgwJTACkBTikDch4AAADaC2Rlc2NyaXB0aW9uchwAAAApAXIsAAAAchoAAAByGgAAAHIdAAAA2gdfX3N0cl9f4gIAAHMCAAAAAAF6DVRhYmxlLl9fc3RyX19jAQAAAAAAAAABAAAAAQAAAEMAAABzEgAAAHwAagByDnwAagBqAXAQZAFTACkCejJSZXR1cm4gdGhlIGNvbm5lY3RhYmxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFRhYmxlLk4pAnJcAAAAcn0AAAApAXIsAAAAchoAAAByGgAAAHIdAAAAcn0AAADlAgAAcwIAAAAABHoKVGFibGUuYmluZGMCAAAAAAAAAAIAAAADAAAAQwAAAHMQAAAAfABqAKABfAGhAQEAZAFTACkCYakBAABBZGQgYSAnZGVwZW5kZW5jeScgZm9yIHRoaXMgVGFibGUuCgogICAgICAgIFRoaXMgaXMgYW5vdGhlciBUYWJsZSBvYmplY3Qgd2hpY2ggbXVzdCBiZSBjcmVhdGVkCiAgICAgICAgZmlyc3QgYmVmb3JlIHRoaXMgb25lIGNhbiwgb3IgZHJvcHBlZCBhZnRlciB0aGlzIG9uZS4KCiAgICAgICAgVXN1YWxseSwgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGFibGVzIGFyZSBkZXRlcm1pbmVkIHZpYQogICAgICAgIEZvcmVpZ25LZXkgb2JqZWN0cy4gICBIb3dldmVyLCBmb3Igb3RoZXIgc2l0dWF0aW9ucyB0aGF0CiAgICAgICAgY3JlYXRlIGRlcGVuZGVuY2llcyBvdXRzaWRlIG9mIGZvcmVpZ24ga2V5cyAocnVsZXMsIGluaGVyaXRpbmcpLAogICAgICAgIHRoaXMgbWV0aG9kIGNhbiBtYW51YWxseSBlc3RhYmxpc2ggc3VjaCBhIGxpbmsuCgogICAgICAgIE4pAnJyAAAA2gNhZGQpAnIsAAAAciEAAAByGgAAAHIaAAAAch0AAADaE2FkZF9pc19kZXBlbmRlbnRfb27rAgAAcwIAAAAADHoZVGFibGUuYWRkX2lzX2RlcGVuZGVudF9vbmMCAAAAAAAAAAIAAAADAAAAQwAAAHMOAAAAfAGgAHwAoQEBAGQBUwApAmF6AwAAQXBwZW5kIGEgOmNsYXNzOmB+LnNjaGVtYS5Db2x1bW5gIHRvIHRoaXMgOmNsYXNzOmB+LnNjaGVtYS5UYWJsZWAuCgogICAgICAgIFRoZSAia2V5IiBvZiB0aGUgbmV3bHkgYWRkZWQgOmNsYXNzOmB+LnNjaGVtYS5Db2x1bW5gLCBpLmUuIHRoZQogICAgICAgIHZhbHVlIG9mIGl0cyBgYC5rZXlgYCBhdHRyaWJ1dGUsIHdpbGwgdGhlbiBiZSBhdmFpbGFibGUKICAgICAgICBpbiB0aGUgYGAuY2BgIGNvbGxlY3Rpb24gb2YgdGhpcyA6Y2xhc3M6YH4uc2NoZW1hLlRhYmxlYCwgYW5kIHRoZQogICAgICAgIGNvbHVtbiBkZWZpbml0aW9uIHdpbGwgYmUgaW5jbHVkZWQgaW4gYW55IENSRUFURSBUQUJMRSwgU0VMRUNULAogICAgICAgIFVQREFURSwgZXRjLiBzdGF0ZW1lbnRzIGdlbmVyYXRlZCBmcm9tIHRoaXMgOmNsYXNzOmB+LnNjaGVtYS5UYWJsZWAKICAgICAgICBjb25zdHJ1Y3QuCgogICAgICAgIE5vdGUgdGhhdCB0aGlzIGRvZXMgKipub3QqKiBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgdGhlIHRhYmxlCiAgICAgICAgYXMgaXQgZXhpc3RzIHdpdGhpbiBhbnkgdW5kZXJseWluZyBkYXRhYmFzZSwgYXNzdW1pbmcgdGhhdAogICAgICAgIHRhYmxlIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBpbiB0aGUgZGF0YWJhc2UuICAgUmVsYXRpb25hbAogICAgICAgIGRhdGFiYXNlcyBzdXBwb3J0IHRoZSBhZGRpdGlvbiBvZiBjb2x1bW5zIHRvIGV4aXN0aW5nIHRhYmxlcwogICAgICAgIHVzaW5nIHRoZSBTUUwgQUxURVIgY29tbWFuZCwgd2hpY2ggd291bGQgbmVlZCB0byBiZQogICAgICAgIGVtaXR0ZWQgZm9yIGFuIGFscmVhZHktZXhpc3RpbmcgdGFibGUgdGhhdCBkb2Vzbid0IGNvbnRhaW4KICAgICAgICB0aGUgbmV3bHkgYWRkZWQgY29sdW1uLgoKICAgICAgICBOKQFyKwAAACkCciwAAADaBmNvbHVtbnIaAAAAchoAAAByHQAAANoNYXBwZW5kX2NvbHVtbvkCAABzAgAAAAAUehNUYWJsZS5hcHBlbmRfY29sdW1uYwIAAAAAAAAAAgAAAAMAAABDAAAAcw4AAAB8AaAAfAChAQEAZAFTACkCYfcCAABBcHBlbmQgYSA6Y2xhc3M6YH4uc2NoZW1hLkNvbnN0cmFpbnRgIHRvIHRoaXMKICAgICAgICA6Y2xhc3M6YH4uc2NoZW1hLlRhYmxlYC4KCiAgICAgICAgVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiB0aGUgY29uc3RyYWludCBiZWluZyBpbmNsdWRlZCBpbiBhbnkKICAgICAgICBmdXR1cmUgQ1JFQVRFIFRBQkxFIHN0YXRlbWVudCwgYXNzdW1pbmcgc3BlY2lmaWMgRERMIGNyZWF0aW9uCiAgICAgICAgZXZlbnRzIGhhdmUgbm90IGJlZW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbgogICAgICAgIDpjbGFzczpgfi5zY2hlbWEuQ29uc3RyYWludGAgb2JqZWN0LgoKICAgICAgICBOb3RlIHRoYXQgdGhpcyBkb2VzICoqbm90KiogcHJvZHVjZSB0aGUgY29uc3RyYWludCB3aXRoaW4gdGhlCiAgICAgICAgcmVsYXRpb25hbCBkYXRhYmFzZSBhdXRvbWF0aWNhbGx5LCBmb3IgYSB0YWJsZSB0aGF0IGFscmVhZHkgZXhpc3RzCiAgICAgICAgaW4gdGhlIGRhdGFiYXNlLiAgIFRvIGFkZCBhIGNvbnN0cmFpbnQgdG8gYW4KICAgICAgICBleGlzdGluZyByZWxhdGlvbmFsIGRhdGFiYXNlIHRhYmxlLCB0aGUgU1FMIEFMVEVSIGNvbW1hbmQgbXVzdAogICAgICAgIGJlIHVzZWQuICBTUUxBbGNoZW15IGFsc28gcHJvdmlkZXMgdGhlCiAgICAgICAgOmNsYXNzOmAuQWRkQ29uc3RyYWludGAgY29uc3RydWN0IHdoaWNoIGNhbiBwcm9kdWNlIHRoaXMgU1FMIHdoZW4KICAgICAgICBpbnZva2VkIGFzIGFuIGV4ZWN1dGFibGUgY2xhdXNlLgoKICAgICAgICBOKQFyKwAAACkCciwAAAByggAAAHIaAAAAchoAAAByHQAAANoRYXBwZW5kX2NvbnN0cmFpbnQPAwAAcwIAAAAAE3oXVGFibGUuYXBwZW5kX2NvbnN0cmFpbnR6AzAuN3qKdGhlIDptZXRoOmAuVGFibGUuYXBwZW5kX2RkbF9saXN0ZW5lcmAgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAgUGxlYXNlIHJlZmVyIHRvIDpjbGFzczpgLkRETEV2ZW50c2AuYwMAAAAAAAAABAAAAAgAAAADAAAAcywAAACHAIcBZgJkAWQChAh9A3QAoAF8AGQDiACgAmQEZAWhAhcAfAOhAwEAZAZTACkHejhBcHBlbmQgYSBEREwgZXZlbnQgbGlzdGVuZXIgdG8gdGhpcyBgYFRhYmxlYGAu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YW1lIHNob3VsZCBiZSBtYWRlIGluIHRoZSBuZXcKICAgICAgICAgOmNsYXNzOmAuVGFibGVgLiAgSWYgc2V0IHRvIGEgc3RyaW5nIG5hbWUsIHRoZSBuZXcgOmNsYXNzOmAuVGFibGVgCiAgICAgICAgIHdpbGwgaGF2ZSB0aGlzIG5ldyBuYW1lIGFzIHRoZSBgYC5zY2hlbWFgYC4gIElmIHNldCB0byBgYE5vbmVgYCwgdGhlCiAgICAgICAgIHNjaGVtYSB3aWxsIGJlIHNldCB0byB0aGF0IG9mIHRoZSBzY2hlbWEgc2V0IG9uIHRoZSB0YXJnZXQKICAgICAgICAgOmNsYXNzOmAuTWV0YURhdGFgLCB3aGljaCBpcyB0eXBpY2FsbHkgYGBOb25lYGAgYXMgd2VsbCwgdW5sZXNzCiAgICAgICAgIHNldCBleHBsaWNpdGx5OjoKCiAgICAgICAgICAgIG0yID0gTWV0YURhdGEoc2NoZW1hPSduZXdzY2hlbWEnKQoKICAgICAgICAgICAgIyB1c2VyX2NvcHlfb25lIHdpbGwgaGF2ZSAibmV3c2NoZW1hIiBhcyB0aGUgc2NoZW1hIG5hbWUKICAgICAgICAgICAgdXNlcl9jb3B5X29uZSA9IHVzZXIudG9tZXRhZGF0YShtMiwgc2NoZW1hPU5vbmUpCgogICAgICAgICAgICBtMyA9IE1ldGFEYXRhKCkgICMgc2NoZW1hIGRlZmF1bHRzIHRvIE5vbmUKCiAgICAgICAgICAgICMgdXNlcl9jb3B5X3R3byB3aWxsIGhhdmUgTm9uZSBhcyB0aGUgc2NoZW1hIG5hbWUKICAgICAgICAgICAgdXNlcl9jb3B5X3R3byA9IHVzZXIudG9tZXRhZGF0YShtMywgc2NoZW1hPU5vbmUpCgogICAgICAgIDpwYXJhbSByZWZlcnJlZF9zY2hlbWFfZm46IG9wdGlvbmFsIGNhbGxhYmxlIHdoaWNoIGNhbiBiZSBzdXBwbGllZAogICAgICAgICBpbiBvcmRlciB0byBwcm92aWRlIGZvciB0aGUgc2NoZW1hIG5hbWUgdGhhdCBzaG91bGQgYmUgYXNzaWduZWQKICAgICAgICAgdG8gdGhlIHJlZmVyZW5jZWQgdGFibGUgb2YgYSA6Y2xhc3M6YC5Gb3JlaWduS2V5Q29uc3RyYWludGAuCiAgICAgICAgIFRoZSBjYWxsYWJsZSBhY2NlcHRzIHRoaXMgcGFyZW50IDpjbGFzczpgLlRhYmxlYCwgdGhlCiAgICAgICAgIHRhcmdldCBzY2hlbWEgdGhhdCB3ZSBhcmUgY2hhbmdpbmcgdG8sIHRoZQogICAgICAgICA6Y2xhc3M6YC5Gb3JlaWduS2V5Q29uc3RyYWludGAgb2JqZWN0LCBhbmQgdGhlIGV4aXN0aW5nCiAgICAgICAgICJ0YXJnZXQgc2NoZW1hIiBvZiB0aGF0IGNvbnN0cmFpbnQuICBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUKICAgICAgICAgc3RyaW5nIHNjaGVtYSBuYW1lIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQuCiAgICAgICAgIEUuZy46OgoKICAgICAgICAgICAgICAgIGRlZiByZWZlcnJlZF9zY2hlbWFfZm4odGFibGUsIHRvX3NjaGVtYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludCwgcmVmZXJyZWRfc2NoZW1hKToKICAgICAgICAgICAgICAgICAgICBpZiByZWZlcnJlZF9zY2hlbWEgPT0gJ2Jhc2VfdGFibGVzJzoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVycmVkX3NjaGVtYQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b19zY2hlbWEKCiAgICAgICAgICAgICAgICBuZXdfdGFibGUgPSB0YWJsZS50b21ldGFkYXRhKG0yLCBzY2hlbWE9ImFsdF9zY2hlbWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJyZWRfc2NoZW1hX2ZuPXJlZmVycmVkX3NjaGVtYV9mbikKCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuOS4yCgogICAgICAgIDpwYXJhbSBuYW1lOiBvcHRpb25hbCBzdHJpbmcgbmFtZSBpbmRpY2F0aW5nIHRo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ZXMsIGFuZCB3aWxsIG5vdCBiZSBxdW90ZWQKICAgICAgICAgIHVubGVzcyB0aGV5IGFyZSBhIHJlc2VydmVkIHdvcmQuICBOYW1lcyB3aXRoIGFueSBudW1iZXIgb2YgdXBwZXIKICAgICAgICAgIGNhc2UgY2hhcmFjdGVycyB3aWxsIGJlIHF1b3RlZCBhbmQgc2VudCBleGFjdGx5LiAgTm90ZSB0aGF0IHRoaXMKICAgICAgICAgIGJlaGF2aW9yIGFwcGxpZXMgZXZlbiBmb3IgZGF0YWJhc2VzIHdoaWNoIHN0YW5kYXJkaXplIHVwcGVyCiAgICAgICAgICBjYXNlIG5hbWVzIGFzIGNhc2UgaW5zZW5zaXRpdmUgc3VjaCBhcyBPcmFjbGUuCgogICAgICAgICAgVGhlIG5hbWUgZmllbGQgbWF5IGJlIG9taXR0ZWQgYXQgY29uc3RydWN0aW9uIHRpbWUgYW5kIGFwcGxpZWQKICAgICAgICAgIGxhdGVyLCBhdCBhbnkgdGltZSBiZWZvcmUgdGhlIENvbHVtbiBpcyBhc3NvY2lhdGVkIHdpdGggYQogICAgICAgICAgOmNsYXNzOmAuVGFibGVgLiAgVGhpcyBpcyB0byBzdXBwb3J0IGNvbnZlbmllbnQKICAgICAgICAgIHVzYWdlIHdpdGhpbiB0aGUgOm1vZDpgfnNxbGFsY2hlbXkuZXh0LmRlY2xhcmF0aXZlYCBleHRlbnNpb24uCgogICAgICAgIDpwYXJhbSB0eXBlXF86IFRoZSBjb2x1bW4ncyB0eXBlLCBpbmRpY2F0ZWQgdXNpbmcgYW4gaW5zdGFuY2Ugd2hpY2gKICAgICAgICAgIHN1YmNsYXNzZXMgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5UeXBlRW5naW5lYC4gIElmIG5vIGFyZ3VtZW50cwogICAgICAgICAgYXJlIHJlcXVpcmVkIGZvciB0aGUgdHlwZSwgdGhlIGNsYXNzIG9mIHRoZSB0eXBlIGNhbiBiZSBzZW50CiAgICAgICAgICBhcyB3ZWxsLCBlLmcuOjoKCiAgICAgICAgICAgICMgdXNlIGEgdHlwZSB3aXRoIGFyZ3VtZW50cwogICAgICAgICAgICBDb2x1bW4oJ2RhdGEnLCBTdHJpbmcoNTApKQoKICAgICAgICAgICAgIyB1c2Ugbm8gYXJndW1lbnRzCiAgICAgICAgICAgIENvbHVtbignbGV2ZWwnLCBJbnRlZ2VyKQoKICAgICAgICAgIFRoZSBgYHR5cGVgYCBhcmd1bWVudCBtYXkgYmUgdGhlIHNlY29uZCBwb3NpdGlvbmFsIGFyZ3VtZW50CiAgICAgICAgICBvciBzcGVjaWZpZWQgYnkga2V5d29yZC4KCiAgICAgICAgICBJZiB0aGUgYGB0eXBlYGAgaXMgYGBOb25lYGAgb3IgaXMgb21pdHRlZCwgaXQgd2lsbCBmaXJzdCBkZWZhdWx0IHRvCiAgICAgICAgICB0aGUgc3BlY2lhbCB0eXBlIDpjbGFzczpgLk51bGxUeXBlYC4gIElmIGFuZCB3aGVuIHRoaXMKICAgICAgICAgIDpjbGFzczpgLkNvbHVtbmAgaXMgbWFkZSB0byByZWZlciB0byBhbm90aGVyIGNvbHVtbiB1c2luZwogICAgICAgICAgOmNsYXNzOmAuRm9yZWlnbktleWAgYW5kL29yIDpjbGFzczpgLkZvcmVpZ25LZXlDb25zdHJhaW50YCwgdGhlIHR5cGUKICAgICAgICAgIG9mIHRoZSByZW1vdGUtcmVmZXJlbmNlZCBjb2x1bW4gd2lsbCBiZSBjb3BpZWQgdG8gdGhpcyBjb2x1bW4gYXMKICAgICAgICAgIHdlbGwsIGF0IHRoZSBtb21lbnQgdGhhdCB0aGUgZm9yZWlnbiBrZXkgaXMgcmVzb2x2ZWQgYWdhaW5zdCB0aGF0CiAgICAgICAgICByZW1vdGUgOmNsYXNzOmAuQ29sdW1uYCBvYmplY3QuCgogICAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAwLjkuMAogICAgICAgICAgICBTdXBwb3J0IGZvciBwcm9wYWdhdGlvbiBvZiB0eXBlIHRvIGEgOmNsYXNzOmAuQ29sdW1uYCBmcm9tIGl0cwogICAgICAgICAgICA6Y2xhc3M6YC5Gb3JlaWduS2V5YCBvYmplY3QgaGFzIGJlZW4gaW1wcm92ZWQgYW5kIHNob3VsZCBiZQogICAgICAgICAgICBtb3JlIHJlbGlhYmxlIGFuZCB0aW1lbHkuCgogICAgICAgIDpwYXJhbSBcKmFyZ3M6IEFkZGl0aW9uYWwgcG9zaXRpb25hbCBhcmd1bWVudHMgaW5jbHVkZSB2YXJpb3VzCiAgICAgICAgICA6Y2xhc3M6YC5TY2hlbWFJdGVtYCBkZXJpdmVkIGNvbnN0cnVjdHMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkCiAgICAgICAgICBhcyBvcHRpb25zIHRvIHRoZSBjb2x1bW4uICBUaGVzZSBpbmNsdWRlIGluc3RhbmNlcyBvZgogICAgICAgICAgOmNsYXNzOmAuQ29uc3RyYWludGAsIDpjbGFzczpgLkZvcmVpZ25LZXlgLCA6Y2xhc3M6YC5Db2x1bW5EZWZhdWx0YCwKICAgICAgICAgIGFuZCA6Y2xhc3M6YC5TZXF1ZW5jZWAuICBJbiBzb21lIGNhc2VzIGFuIGVxdWl2YWxlbnQga2V5d29yZAogICAgICAgICAgYXJndW1lbnQgaXMgYXZhaWxhYmxlIHN1Y2ggYXMgYGBzZXJ2ZXJfZGVmYXVsdGBgLCBgYGRlZmF1bHRgYAogICAgICAgICAgYW5kIGBgdW5pcXVlYGAuCgogICAgICAgIDpwYXJhbSBhdXRvaW5jcmVtZW50OiBTZXQgdXAgImF1dG8gaW5jcmVtZW50IiBzZW1hbnRpY3MgZm9yIGFuIGludGVnZXIKICAgICAgICAgIHByaW1hcnkga2V5IGNvbHVtbi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBzdHJpbmcgYGAiYXV0byJgYAogICAgICAgICAgd2hpY2ggaW5kaWNhdGVzIHRoYXQgYSBzaW5nbGUtY29sdW1uIHByaW1hcnkga2V5IHRoYXQgaXMgb2YKICAgICAgICAgIGFuIElOVEVHRVIgdHlwZSB3aXRoIG5vIHN0YXRlZCBjbGllbnQtc2lkZSBvciBweXRob24tc2lkZSBkZWZhdWx0cwogICAgICAgICAgc2hvdWxkIHJlY2VpdmUgYXV0byBpbmNyZW1lbnQgc2VtYW50aWNzIGF1dG9tYXRpY2FsbHk7CiAgICAgICAgICBhbGwgb3RoZXIgdmFyaWV0aWVzIG9mIHByaW1hcnkga2V5IGNvbHVtbnMgd2lsbCBub3QuICBUaGlzCiAgICAgICAgICBpbmNsdWRlcyB0aGF0IDp0ZXJtOmBERExgIHN1Y2ggYXMgUG9zdGdyZVNRTCBTRVJJQUwgb3IgTXlTUUwKICAgICAgICAgIEFVVE9fSU5DUkVNRU5UIHdpbGwgYmUgZW1pdHRlZCBmb3IgdGhpcyBjb2x1bW4gZHVyaW5nIGEgdGFibGUKICAgICAgICAgIGNyZWF0ZSwgYXMgd2VsbCBhcyB0aGF0IHRoZSBjb2x1bW4gaXMgYXNzdW1lZCB0byBnZW5lcmF0ZSBuZXcKICAgICAgICAgIGludGVnZXIgcHJpbWFyeSBrZXkgdmFsdWVzIHdoZW4gYW4gSU5TRVJUIHN0YXRlbWVudCBpbnZva2VzIHdoaWNoCiAgICAgICAgICB3aWxsIGJlIHJldHJpZXZlZCBieSB0aGUgZGlhbGVjdC4KCiAgICAgICAgICBUaGUgZmxhZyBtYXkgYmUgc2V0IHRvIGBgVHJ1ZWBgIHRvIGluZGljYXRlIHRoYXQgYSBjb2x1bW4gd2hpY2gKICAgICAgICAgIGlzIHBhcnQgb2YgYSBjb21wb3NpdGUgKGUuZy4gbXVsdGktY29sdW1uKSBwcmltYXJ5IGtleSBzaG91bGQKICAgICAgICAgIGhhdmUgYXV0b2luY3JlbWVudCBzZW1hbnRpY3MsIHRob3VnaCBub3RlIHRoYXQgb25seSBvbmUgY29sdW1uCiAgICAgICAgICB3aXRoaW4gYSBwcmltYXJ5IGtleSBtYXkgaGF2ZSB0aGlzIHNldHRpbmcuICAgIEl0IGNhbiBhbHNvCiAgICAgICAgICBiZSBzZXQgdG8gYGBUcnVlYGAgdG8gaW5kaWNhdGUgYXV0b2luY3JlbWVudCBzZW1hbnRpY3Mgb24gYQogICAgICAgICAgY29sdW1uIHRoYXQgaGFzIGEgY2xpZW50LXNpZGUgb3Igc2VydmVyLXNpZGUgZGVmYXVsdCBjb25maWd1cmVkLAogICAgICAgICAgaG93ZXZlciBub3RlIHRoYXQgbm90IGFsbCBkaWFsZWN0cyBjYW4gYWNjb21tb2RhdGUgYWxsIHN0eWxlcwogICAgICAgICAgb2YgZGVmYXVsdCBhcyBhbiAiYXV0b2luY3JlbWVudCIuICBJdCBjYW4gYWxzbyBiZQogICAgICAgICAgc2V0IHRvIGBgRmFsc2VgYCBvbiBhIHNpbmdsZS1jb2x1bW4gcHJpbWFyeSBrZXkgdGhhdCBoYXMgYQogICAgICAgICAgZGF0YXR5cGUgb2YgSU5URUdFUiBpbiBvcmRlciB0byBkaXNhYmxlIGF1dG8gaW5jcmVtZW50IHNlbWFudGljcwogICAgICAgICAgZm9yIHRoYXQgY29sdW1uLgoKICAgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4xIFRoZSBhdXRvaW5jcmVtZW50IGZsYWcgbm93IGRlZmF1bHRzIHRvCiAgICAgICAgICAgICBgYCJhdXRvImBgIHdoaWNoIGluZGljYXRlcyBhdXRvaW5jcmVtZW50IHNlbWFudGljcyBieSBkZWZhdWx0CiAgICAgICAgICAgICBmb3Igc2luZ2xlLWNvbHVtbiBpbnRlZ2VyIHByaW1hcnkga2V5cyBvbmx5OyBmb3IgY29tcG9zaXRlCiAgICAgICAgICAgICAobXVsdGktY29sdW1uKSBwcmltYXJ5IGtleXMsIGF1dG9pbmNyZW1lbnQgaXMgbmV2ZXIgaW1wbGljaXRseQogICAgICAgICAgICAgZW5hYmxlZDsgYXMgYWx3YXlzLCBgYGF1dG9pbmNyZW1lbnQ9VHJ1ZWBgIHdpbGwgYWxsb3cgZm9yCiAgICAgICAgICAgICBhdCBtb3N0IG9uZSBvZiB0aG9zZSBjb2x1bW5zIHRvIGJlIGFuICJhdXRvaW5jcmVtZW50IiBjb2x1bW4uCiAgICAgICAgICAgICBgYGF1dG9pbmNyZW1lbnQ9VHJ1ZWBgIG1heSBhbHNvIGJlIHNldCBvbiBhIDpjbGFzczpgLkNvbHVtbmAKICAgICAgICAgICAgIHRoYXQgaGFzIGFuIGV4cGxpY2l0IGNsaWVudC1zaWRlIG9yIHNlcnZlci1zaWRlIGRlZmF1bHQsCiAgICAgICAgICAgICBzdWJqZWN0IHRvIGxpbWl0YXRpb25zIG9mIHRoZSBiYWNrZW5kIGRhdGFiYXNlIGFuZCBkaWFsZWN0LgoKCiAgICAgICAgICBUaGUgc2V0dGluZyAqb25seSogaGFzIGFuIGVmZmVjdCBmb3IgY29sdW1ucyB3aGljaCBhcmU6CgogICAgICAgICAgKiBJbnRlZ2VyIGRlcml2ZWQgKGkuZS4gSU5ULCBTTUFMTElOVCwgQklHSU5UKS4KCiAgICAgICAgICAqIFBhcnQgb2YgdGhlIHByaW1hcnkga2V5CgogICAgICAgICAgKiBOb3QgcmVmZXJyaW5nIHRvIGFub3RoZXIgY29sdW1uIHZpYSA6Y2xhc3M6YC5Gb3JlaWduS2V5YCwgdW5sZXNzCiAgICAgICAgICAgIHRoZSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXMgYGAnaWdub3JlX2ZrJ2BgOjoKCiAgICAgICAgICAgICAgICAjIHR1cm4gb24gYXV0b2luY3JlbWVudCBmb3IgdGhpcyBjb2x1bW4gZGVzcGl0ZQogICAgICAgICAgICAgICAgIyB0aGUgRm9yZWlnbktleSgpCiAgICAgICAgICAgICAgICBDb2x1bW4oJ2lkJywgRm9yZWlnbktleSgnb3RoZXIuaWQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5PVRydWUsIGF1dG9pbmNyZW1lbnQ9J2lnbm9yZV9maycpCgogICAgICAgICAgICBJdCBpcyB0eXBpY2FsbHkgbm90IGRlc2lyYWJsZSB0byBoYXZlICJhdXRvaW5jcmVtZW50IiBlbmFibGVkIG9uIGEKICAgICAgICAgICAgY29sdW1uIHRoYXQgcmVmZXJzIHRvIGFub3RoZXIgdmlhIGZvcmVpZ24ga2V5LCBhcyBzdWNoIGEgY29sdW1uIGlzCiAgICAgICAgICAgIHJlcXVpcmVkIHRvIHJlZmVyIHRvIGEgdmFsdWUgdGhhdCBvcmlnaW5hdGVzIGZyb20gZWxzZXdoZXJlLgoKICAgICAgICAgIFRoZSBzZXR0aW5nIGhhcyB0aGVzZSB0d28gZWZmZWN0cyBvbiBjb2x1bW5zIHRoYXQgbWVldCB0aGUKICAgICAgICAgIGFib3ZlIGNyaXRlcmlhOgoKICAgICAgICAgICogRERMIGlzc3VlZCBmb3IgdGhlIGNvbHVtbiB3aWxsIGluY2x1ZGUgZGF0YWJhc2Utc3BlY2lmaWMKICAgICAgICAgICAga2V5d29yZHMgaW50ZW5kZWQgdG8gc2lnbmlmeSB0aGlzIGNvbHVtbiBhcyBhbgogICAgICAgICAgICAiYXV0b2luY3JlbWVudCIgY29sdW1uLCBzdWNoIGFzIEFVVE8gSU5DUkVNRU5UIG9uIE15U1FMLAogICAgICAgICAgICBTRVJJQUwgb24gUG9zdGdyZVNRTCwgYW5kIElERU5USVRZIG9uIE1TLVNRTC4gIEl0IGRvZXMKICAgICAgICAgICAgKm5vdCogaXNzdWUgQVVUT0lOQ1JFTUVOVCBmb3IgU1FMaXRlIHNpbmNlIHRoaXMgaXMgYQogICAgICAgICAgICBzcGVjaWFsIFNRTGl0ZSBmbGFnIHRoYXQgaXMgbm90IHJlcXVpcmVkIGZvciBhdXRvaW5jcmVtZW50aW5nCiAgICAgICAgICAgIGJlaGF2aW9yLgoKICAgICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICAgICAgOnJlZjpgc3FsaXRlX2F1dG9pbmNyZW1lbnRgCgogICAgICAgICAgKiBUaGUgY29sdW1uIHdpbGwgYmUgY29uc2lkZXJlZCB0byBiZSBhdmFpbGFibGUgdXNpbmcgYW4KICAgICAgICAgICAgImF1dG9pbmNyZW1lbnQiIG1ldGhvZCBzcGVjaWZpYyB0byB0aGUgYmFja2VuZCBkYXRhYmFzZSwgc3VjaAogICAgICAgICAgICBhcyBjYWxsaW5nIHVwb24gYGBjdXJzb3IubGFzdHJvd2lkYGAsIHVzaW5nIFJFVFVSTklORyBpbiBhbgogICAgICAgICAgICBJTlNFUlQgc3RhdGVtZW50IHRvIGdldCBhdCBhIHNlcXVlbmNlLWdlbmVyYXRlZCB2YWx1ZSwgb3IgdXNpbmcKICAgICAgICAgICAgc3BlY2lhbCBmdW5jdGlvbnMgc3VjaCBhcyAiU0VMRUNUIHNjb3BlX2lkZW50aXR5KCkiLgogICAgICAgICAgICBUaGVzZSBtZXRob2RzIGFyZSBoaWdobHkgc3BlY2lmaWMgdG8gdGhlIERCQVBJcyBhbmQgZGF0YWJhc2VzIGluCiAgICAgICAgICAgIHVzZSBhbmQgdmFyeSBncmVhdGx5LCBzbyBjYXJlIHNob3VsZCBiZSB0YWtlbiB3aGVuIGFzc29jaWF0aW5nCiAgICAgICAgICAgIGBgYXV0b2luY3JlbWVudD1UcnVlYGAgd2l0aCBhIGN1c3RvbSBkZWZhdWx0IGdlbmVyYXRpb24gZnVuY3Rpb24uCgoKICAgICAgICA6cGFyYW0gZGVmYXVsdDogQSBzY2FsYXIsIFB5dGhvbiBjYWxsYWJsZSwgb3IKICAgICAgICAgICAgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlCiAgICAgICAgICAgICpkZWZhdWx0IHZhbHVlKiBmb3IgdGhpcyBjb2x1bW4sIHdoaWNoIHdpbGwgYmUgaW52b2tlZCB1cG9uIGluc2VydAogICAgICAgICAgICBpZiB0aGlzIGNvbHVtbiBpcyBvdGhlcndpc2Ugbm90IHNwZWNpZmllZCBpbiB0aGUgVkFMVUVTIGNsYXVzZSBvZgogICAgICAgICAgICB0aGUgaW5zZXJ0LiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gdXNpbmcgOmNsYXNzOmAuQ29sdW1uRGVmYXVsdGAgYXMKICAgICAgICAgICAgYSBwb3NpdGlvbmFsIGFyZ3VtZW50OyBzZWUgdGhhdCBjbGFzcyBmb3IgZnVsbCBkZXRhaWwgb24gdGhlCiAgICAgICAgICAgIHN0cnVjdHVyZSBvZiB0aGUgYXJndW1lbnQuCgogICAgICAgICAgICBDb250cmFzdCB0aGlzIGFyZ3VtZW50IHRvIDpwYXJhbXJlZjpgLkNvbHVtbi5zZXJ2ZXJfZGVmYXVsdGAKICAgICAgICAgICAgd2hpY2ggY3JlYXRlcyBhIGRlZmF1bHQgZ2VuZXJhdG9yIG9uIHRoZSBkYXRhYmFzZSBzaWRlLgoKICAgICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICAgICAgOnJlZjpgbWV0YWRhdGFfZGVmYXVsdHNfdG9wbGV2ZWxgCgogICAgICAgIDpwYXJhbSBkb2M6IG9wdGlvbmFsIFN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBPUk0gb3Igc2ltaWxhcgogICAgICAgICAgICB0byBkb2N1bWVudCBhdHRyaWJ1dGVzIG9uIHRoZSBQeXRob24gc2lkZS4gICBUaGlzIGF0dHJpYnV0ZSBkb2VzCiAgICAgICAgICAgICoqbm90KiogcmVuZGVyIFNRTCBjb21tZW50czsgdXNlIHRoZSA6cGFyYW1yZWY6YC5Db2x1bW4uY29tbWVudGAKICAgICAgICAgICAgcGFyYW1ldGVyIGZvciB0aGlzIHB1cnBvc2UuCgogICAgICAgIDpwYXJhbSBrZXk6IEFuIG9wdGlvbmFsIHN0cmluZyBpZGVudGlmaWVyIHdoaWNoIHdpbGwgaWRlbnRpZnkgdGhpcwogICAgICAgICAgICBgYENvbHVtbmBgIG9iamVjdCBvbiB0aGUgOmNsYXNzOmAuVGFibGVgLiBXaGVuIGEga2V5IGlzIHByb3ZpZGVkLAogICAgICAgICAgICB0aGlzIGlzIHRoZSBvbmx5IGlkZW50aWZpZXIgcmVmZXJlbmNpbmcgdGhlIGBgQ29sdW1uYGAgd2l0aGluIHRoZQogICAgICAgICAgICBhcHBsaWNhdGlvbiwgaW5jbHVkaW5nIE9STSBhdHRyaWJ1dGUgbWFwcGluZzsgdGhlIGBgbmFtZWBgIGZpZWxkCiAgICAgICAgICAgIGlzIHVzZWQgb25seSB3aGVuIHJlbmRlcmluZyBTUUwuCgogICAgICAgIDpwYXJhbSBpbmRleDogV2hlbiBgYFRydWVgYCwgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbHVtbiBpcyBpbmRleGVkLgogICAgICAgICAgICBUaGlzIGlzIGEgc2hvcnRjdXQgZm9yIHVzaW5nIGEgOmNsYXNzOmAuSW5kZXhgIGNvbnN0cnVjdCBvbiB0aGUKICAgICAgICAgICAgdGFibGUuIFRvIHNwZWNpZnkgaW5kZXhlcyB3aXRoIGV4cGxpY2l0IG5hbWVzIG9yIGluZGV4ZXMgdGhhdAogICAgICAgICAgICBjb250YWluIG11bHRpcGxlIGNvbHVtbnMsIHVzZSB0aGUgOmNsYXNzOmAuSW5kZXhgIGNvbnN0cnVjdAogICAgICAgICAgICBpbnN0ZWFkLgoKICAgICAgICA6cGFyYW0gaW5mbzogT3B0aW9uYWwgZGF0YSBkaWN0aW9uYXJ5IHdoaWNoIHdpbGwgYmUgcG9wdWxhdGVkIGludG8gdGhlCiAgICAgICAgICAgIDphdHRyOmAuU2NoZW1hSXRlbS5pbmZvYCBhdHRyaWJ1dGUgb2YgdGhpcyBvYmplY3QuCgogICAgICAgIDpwYXJhbSBudWxsYWJsZTogV2hlbiBzZXQgdG8gYGBGYWxzZWBgLCB3aWxsIGNhdXNlIHRoZSAiTk9UIE5VTEwiCiAgICAgICAgICAgIHBocmFzZSB0byBiZSBhZGRlZCB3aGVuIGdlbmVyYXRpbmcgRERMIGZvciB0aGUgY29sdW1uLiAgIFdoZW4KICAgICAgICAgICAgYGBUcnVlYGAsIHdpbGwgbm9ybWFsbHkgZ2VuZXJhdGUgbm90aGluZyAoaW4gU1FMIHRoaXMgZGVmYXVsdHMgdG8KICAgICAgICAgICAgIk5VTEwiKSwgZXhjZXB0IGluIHNvbWUgdmVyeSBzcGVjaWZpYyBiYWNrZW5kLXNwZWNpZmljIGVkZ2UgY2FzZXMKICAgICAgICAgICAgd2hlcmUgIk5VTEwiIG1heSByZW5kZXIgZXhwbGljaXRseS4gICBEZWZhdWx0cyB0byBgYFRydWVgYCB1bmxlc3MKICAgICAgICAgICAgOnBhcmFtcmVmOmB+LkNvbHVtbi5wcmltYXJ5X2tleWAgaXMgYWxzbyBgYFRydWVgYCwgaW4gd2hpY2ggY2FzZSBpdAogICAgICAgICAgICBkZWZhdWx0cyB0byBgYEZhbHNlYGAuICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgd2hlbiBpc3N1aW5nCiAgICAgICAgICAgIENSRUFURSBUQUJMRSBzdGF0ZW1lbnRzLgoKICAgICAgICA6cGFyYW0gb251cGRhdGU6IEEgc2NhbGFyLCBQeXRob24gY2FsbGFibGUsIG9yCiAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24uQ2xhdXNlRWxlbWVudGAgcmVwcmVzZW50aW5nIGEKICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb2x1bW4gd2l0aGluIFVQREFURQogICAgICAgICAgICBzdGF0ZW1lbnRzLCB3aGljaCB3aWxsIGJlIGludm9rZWQgdXBvbiB1cGRhdGUgaWYgdGhpcyBjb2x1bW4gaXMgbm90CiAgICAgICAgICAgIHByZXNlbnQgaW4gdGhlIFNFVCBjbGF1c2Ugb2YgdGhlIHVwZGF0ZS4gVGhpcyBpcyBhIHNob3J0Y3V0IHRvCiAgICAgICAgICAgIHVzaW5nIDpjbGFzczpgLkNvbHVtbkRlZmF1bHRgIGFzIGEgcG9zaXRpb25hbCBhcmd1bWVudCB3aXRoCiAgICAgICAgICAgIGBgZm9yX3VwZGF0ZT1UcnVlYGAuCgogICAgICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgICAgICA6cmVmOmBtZXRhZGF0YV9kZWZhdWx0c2AgLSBjb21wbGV0ZSBkaXNjdXNzaW9uIG9mIG9udXBkYXRlCgogICAgICAgIDpwYXJhbSBwcmltYXJ5X2tleTogSWYgYGBUcnVlYGAsIG1hcmtzIHRoaXMgY29sdW1uIGFzIGEgcHJpbWFyeSBrZXkKICAgICAgICAgICAgY29sdW1uLiBNdWx0aXBsZSBjb2x1bW5zIGNhbiBoYXZlIHRoaXMgZmxhZyBzZXQgdG8gc3BlY2lmeQogICAgICAgICAgICBjb21wb3NpdGUgcHJpbWFyeSBrZXlzLiBBcyBhbiBhbHRlcm5hdGl2ZSwgdGhlIHByaW1hcnkga2V5IG9mIGEKICAgICAgICAgICAgOmNsYXNzOmAuVGFibGVgIGNhbiBiZSBzcGVjaWZpZWQgdmlhIGFuIGV4cGxpY2l0CiAgICAgICAgICAgIDpjbGFzczpgLlByaW1hcnlLZXlDb25zdHJhaW50YCBvYmplY3QuCgogICAgICAgIDpwYXJhbSBzZXJ2ZXJfZGVmYXVsdDogQSA6Y2xhc3M6YC5GZXRjaGVkVmFsdWVgIGluc3RhbmNlLCBzdHIsIFVuaWNvZGUKICAgICAgICAgICAgb3IgOmZ1bmM6YH5zcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLnRleHRgIGNvbnN0cnVjdCByZXByZXNlbnRpbmcKICAgICAgICAgICAgdGhlIERETCBERUZBVUxUIHZhbHVlIGZvciB0aGUgY29sdW1uLgoKICAgICAgICAgICAgU3RyaW5nIHR5cGVzIHdpbGwgYmUgZW1pdHRlZCBhcy1pcywgc3Vycm91bmRlZCBieSBzaW5nbGUgcXVvdGVzOjoKCiAgICAgICAgICAgICAgICBDb2x1bW4oJ3gnLCBUZXh0LCBzZXJ2ZXJfZGVmYXVsdD0idmFsIikKCiAgICAgICAgICAgICAgICB4IFRFWFQgREVGQVVMVCAndmFsJwoKICAgICAgICAgICAgQSA6ZnVuYzpgfnNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24udGV4dGAgZXhwcmVzc2lvbiB3aWxsIGJlCiAgICAgICAgICAgIHJlbmRlcmVkIGFzLWlzLCB3aXRob3V0IHF1b3Rlczo6CgogICAgICAgICAgICAgICAgQ29sdW1uKCd5JywgRGF0ZVRpbWUsIHNlcnZlcl9kZWZhdWx0PXRleHQoJ05PVygpJykpCgogICAgICAgICAgICAgICAgeSBEQVRFVElNRSBERUZBVUxUIE5PVygpCgogICAgICAgICAgICBTdHJpbmdzIGFuZCB0ZXh0KCkgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBhCiAgICAgICAgICAgIDpjbGFzczpgLkRlZmF1bHRDbGF1c2VgIG9iamVjdCB1cG9uIGluaXRpYWxpemF0aW9uLgoKICAgICAgICAgICAgVXNlIDpjbGFzczpgLkZldGNoZWRWYWx1ZWAgdG8gaW5kaWNhdGUgdGhhdCBhbiBhbHJlYWR5LWV4aXN0aW5nCiAgICAgICAgICAgIGNvbHVtbiB3aWxsIGdlbmVyYXRlIGEgZGVmYXVsdCB2YWx1ZSBvbiB0aGUgZGF0YWJhc2Ugc2lkZSB3aGljaAogICAgICAgICAgICB3aWxsIGJlIGF2YWlsYWJsZSB0byBTUUxBbGNoZW15IGZvciBwb3N0LWZldGNoIGFmdGVyIGluc2VydHMuIFRoaXMKICAgICAgICAgICAgY29uc3RydWN0IGRvZXMgbm90IHNwZWNpZnkgYW55IERETCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGlzIGxlZnQKICAgICAgICAgICAgdG8gdGhlIGRhdGFiYXNlLCBzdWNoIGFzIHZpYSBhIHRyaWdnZXIuCgogICAgICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgICAgICA6cmVmOmBzZXJ2ZXJfZGVmYXVsdHNgIC0gY29tcGxldGUgZGlzY3Vzc2lvbiBvZiBzZXJ2ZXIgc2lkZQogICAgICAgICAgICAgICAgZGVmYXVsdHMKCiAgICAgICAgOnBhcmFtIHNlcnZlcl9vbnVwZGF0ZTogICBBIDpjbGFzczpgLkZldGNoZWRWYWx1ZWAgaW5zdGFuY2UKICAgICAgICAgICAgIHJlcHJlc2VudGluZyBhIGRhdGFiYXNlLXNpZGUgZGVmYXVsdCBnZW5lcmF0aW9uIGZ1bmN0aW9uLAogICAgICAgICAgICAgc3VjaCBhcyBhIHRyaWdnZXIuIFRoaXMKICAgICAgICAgICAgIGluZGljYXRlcyB0byBTUUxBbGNoZW15IHRoYXQgYSBuZXdseSBnZW5lcmF0ZWQgdmFsdWUgd2lsbCBiZQogICAgICAgICAgICAgYXZhaWxhYmxlIGFmdGVyIHVwZGF0ZXMuIFRoaXMgY29uc3RydWN0IGRvZXMgbm90IGFjdHVhbGx5CiAgICAgICAgICAgICBpbXBsZW1lbnQgYW55IGtpbmQgb2YgZ2VuZXJhdGlvbiBmdW5jdGlvbiB3aXRoaW4gdGhlIGRhdGFiYXNlLAogICAgICAgICAgICAgd2hpY2ggaW5zdGVhZCBtdXN0IGJlIHNwZWNpZmllZCBzZXBhcmF0ZWx5LgoKICAgICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICAgICAgOnJlZjpgdHJpZ2dlcmVkX2NvbHVtbnNgCgogICAgICAgIDpwYXJhbSBxdW90ZTogRm9yY2UgcXVvdGluZyBvZiB0aGlzIGNvbHVtbidzIG5hbWUgb24gb3Igb2ZmLAogICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byBgYFRydWVgYCBvciBgYEZhbHNlYGAuIFdoZW4gbGVmdCBhdCBpdHMgZGVmYXVsdAogICAgICAgICAgICAgb2YgYGBOb25lYGAsIHRoZSBjb2x1bW4gaWRlbnRpZmllciB3aWxsIGJlIHF1b3RlZCBhY2NvcmRpbmcgdG8KICAgICAgICAgICAgIHdoZXRoZXIgdGhlIG5hbWUgaXMgY2FzZSBzZW5zaXRpdmUgKGlkZW50aWZpZXJzIHdpdGggYXQgbGVhc3Qgb25lCiAgICAgICAgICAgICB1cHBlciBjYXNlIGNoYXJhY3RlciBhcmUgdHJlYXRlZCBhcyBjYXNlIHNlbnNpdGl2ZSksIG9yIGlmIGl0J3MgYQogICAgICAgICAgICAgcmVzZXJ2ZWQgd29yZC4gVGhpcyBmbGFnIGlzIG9ubHkgbmVlZGVkIHRvIGZvcmNlIHF1b3Rpbmcgb2YgYQogICAgICAgICAgICAgcmVzZXJ2ZWQgd29yZCB3aGljaCBpcyBub3Qga25vd24gYnkgdGhlIFNRTEFsY2hlbXkgZGlhbGVjdC4KCiAgICAgICAgOnBhcmFtIHVuaXF1ZTogV2hlbiBgYFRydWVgYCwgaW5kaWNhdGVzIHRoYXQgdGhpcyBjb2x1bW4gY29udGFpbnMgYQogICAgICAgICAgICAgdW5pcXVlIGNvbnN0cmFpbnQsIG9yIGlmIGBgaW5kZXhgYCBpcyBgYFRydWVgYCBhcyB3ZWxsLCBpbmRpY2F0ZXMKICAgICAgICAgICAgIHRoYXQgdGhlIDpjbGFzczpgLkluZGV4YCBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIHRoZSB1bmlxdWUgZmxhZy4KICAgICAgICAgICAgIFRvIHNwZWNpZnkgbXVsdGlwbGUgY29sdW1ucyBpbiB0aGUgY29uc3RyYWludC9pbmRleCBvciB0byBzcGVjaWZ5CiAgICAgICAgICAgICBhbiBleHBsaWNpdCBuYW1lLCB1c2UgdGhlIDpjbGFzczpgLlVuaXF1ZUNvbnN0cmFpbnRgIG9yCiAgICAgICAgICAgICA6Y2xhc3M6YC5JbmRleGAgY29uc3RydWN0cyBleHBsaWNpdGx5LgoKICAgICAgICA6cGFyYW0gc3lzdGVtOiBXaGVuIGBgVHJ1ZWBgLCBpbmRpY2F0ZXMgdGhpcyBpcyBhICJzeXN0ZW0iIGNvbHVtbiwKICAgICAgICAgICAgIHRoYXQgaXMgYSBjb2x1bW4gd2hpY2ggaXMgYXV0b21hdGljYWxseSBtYWRlIGF2YWlsYWJsZSBieSB0aGUKICAgICAgICAgICAgIGRhdGFiYXNlLCBhbmQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgY29sdW1ucyBsaXN0IGZvciBhCiAgICAgICAgICAgICBgYENSRUFURSBUQUJMRWBgIHN0YXRlbWVudC4KCiAgICAgICAgICAgICBGb3IgbW9yZSBlbGFib3JhdGUgc2NlbmFyaW9zIHdoZXJlIGNvbHVtbnMgc2hvdWxkIGJlCiAgICAgICAgICAgICBjb25kaXRpb25hbGx5IHJlbmRlcmVkIGRpZmZlcmVudGx5IG9uIGRpZmZlcmVudCBiYWNrZW5kcywKICAgICAgICAgICAgIGNvbnNpZGVyIGN1c3RvbSBjb21waWxhdGlvbiBydWxlcyBmb3IgOmNsYXNzOmAuQ3JlYXRlQ29sdW1uYC4KCiAgICAgICAgOnBhcmFtIGNvbW1lbnQ6IE9wdGlvbmFsIHN0cmluZyB0aGF0IHdpbGwgcmVuZGVyIGFuIFNRTCBjb21tZW50IG9uCiAgICAgICAgICAgICB0YWJsZSBjcmVhdGlvbi4KCiAgICAgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIgQWRkZWQgdGhlIDpwYXJhbXJlZjpgLkNvbHVtbi5jb21tZW50YAogICAgICAgICAgICAgICAgcGFyYW1ldGVyIHRvIDpjbGFzczpgLkNvbHVtbmAuCgoKICAgICAgICByGwAAAE7aBXR5cGVfcgEAAAB6ME1heSBub3QgcGFzcyBuYW1lIHBvc2l0aW9uYWxseSBhbmQgYXMgYSBrZXl3b3JkLloKX3NxbGFfdHlwZXoxTWF5IG5vdCBwYXNzIHR5cGVfIHBvc2l0aW9uYWxseSBhbmQgYXMgYSBrZXl3b3JkLnI1AAAAejlFeHBsaWNpdCAnbmFtZScgaXMgcmVxdWlyZWQgd2hlbiBzZW5kaW5nICdxdW90ZScgYXJndW1lbnRyIgAAAHKMAAAARtoIbnVsbGFibGXaB2RlZmF1bHTaDnNlcnZlcl9kZWZhdWx02g9zZXJ2ZXJfb251cGRhdGVyuwAAAHKwAAAA2gZzeXN0ZW3aA2RvY9oIb251cGRhdGXaDWF1dG9pbmNyZW1lbnTaBGF1dG9yaAAAANoIX3Byb3hpZXNaE193YXJuX29uX2J5dGVzdHJpbmd6P1VuaWNvZGUgY29sdW1uICclcycgaGFzIG5vbi11bmljb2RlIGRlZmF1bHQgdmFsdWUgJXIgc3BlY2lmaWVkLlQpAdoKZm9yX3VwZGF0ZXIyAAAAKS1yUAAAAHKmAAAAch8AAAByGAAAANoMc3RyaW5nX3R5cGVzchYAAAByUQAA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dCA9IFRhYmxlKCJyZW1vdGVfdGFibGUiLCBtZXRhZGF0YSwKICAgICAgICAgICAgQ29sdW1uKCJyZW1vdGVfaWQiLCBGb3JlaWduS2V5KCJtYWluX3RhYmxlLmlkIikpCiAgICAgICAgKQoKICAgIE5vdGUgdGhhdCBgYEZvcmVpZ25LZXlgYCBpcyBvbmx5IGEgbWFya2VyIG9iamVjdCB0aGF0IGRlZmluZXMKICAgIGEgZGVwZW5kZW5jeSBiZXR3ZWVuIHR3byBjb2x1bW5zLiAgIFRoZSBhY3R1YWwgY29uc3RyYWludAogICAgaXMgaW4gYWxsIGNhc2VzIHJlcHJlc2VudGVkIGJ5IHRoZSA6Y2xhc3M6YC5Gb3JlaWduS2V5Q29uc3RyYWludGAKICAgIG9iamVjdC4gICBUaGlzIG9iamVjdCB3aWxsIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4KICAgIGEgYGBGb3JlaWduS2V5YGAgaXMgYXNzb2NpYXRlZCB3aXRoIGEgOmNsYXNzOmAuQ29sdW1uYCB3aGljaAogICAgaW4gdHVybiBpcyBhc3NvY2lhdGVkIHdpdGggYSA6Y2xhc3M6YC5UYWJsZWAuICAgQ29udmVyc2VseSwKICAgIHdoZW4gOmNsYXNzOmAuRm9yZWlnbktleUNvbnN0cmFpbnRgIGlzIGFwcGxpZWQgdG8gYSA6Y2xhc3M6YC5UYWJsZWAsCiAgICBgYEZvcmVpZ25LZXlgYCBtYXJrZXJzIGFyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB0byBiZQogICAgcHJlc2VudCBvbiBlYWNoIGFzc29jaWF0ZWQgOmNsYXNzOmAuQ29sdW1uYCwgd2hpY2ggYXJlIGFsc28KICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29uc3RyYWludCBvYmplY3QuCgogICAgTm90ZSB0aGF0IHlvdSBjYW5ub3QgZGVmaW5lIGEgImNvbXBvc2l0ZSIgZm9yZWlnbiBrZXkgY29uc3RyYWludCwKICAgIHRoYXQgaXMgYSBjb25zdHJhaW50IGJldHdlZW4gYSBncm91cGluZyBvZiBtdWx0aXBsZSBwYXJlbnQvY2hpbGQKICAgIGNvbHVtbnMsIHVzaW5nIGBgRm9yZWlnbktleWBgIG9iamVjdHMuICAgVG8gZGVmaW5lIHRoaXMgZ3JvdXBpbmcsCiAgICB0aGUgOmNsYXNzOmAuRm9yZWlnbktleUNvbnN0cmFpbnRgIG9iamVjdCBtdXN0IGJlIHVzZWQsIGFuZCBhcHBsaWVkCiAgICB0byB0aGUgOmNsYXNzOmAuVGFibGVgLiAgIFRoZSBhc3NvY2lhdGVkIGBgRm9yZWlnbktleWBgIG9iamVjdHMKICAgIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuCgogICAgVGhlIGBgRm9yZWlnbktleWBgIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIGFuIGluZGl2aWR1YWwKICAgIDpjbGFzczpgLkNvbHVtbmAgb2JqZWN0IGFyZSBhdmFpbGFibGUgaW4gdGhlIGBmb3JlaWduX2tleXNgIGNvbGxlY3Rpb24KICAgIG9mIHRoYXQgY29sdW1uLgoKICAgIEZ1cnRoZXIgZXhhbXBsZXMgb2YgZm9yZWlnbiBrZXkgY29uZmlndXJhdGlvbiBhcmUgaW4KICAgIDpyZWY6YG1ldGFkYXRhX2ZvcmVpZ25rZXlzYC4KCiAgICBaC2ZvcmVpZ25fa2V5TkZjDAAAAAAAAAANAAAABAAAAEsAAABz0gAAAHwBfABfAHQBfABqAHQCagODAnIcZAF8AF8EbmZ0BXwAagBkAoMCcjZ8AGoAoAahAHwAXwRuCHwAagB8AF8EdAF8AGoEdAeDAnNcdAigCWQDfABqBBYAoQGCAW4mdAF8AGoEagp0AmoLdAxmAoMCc4J0CKAJZAR8AGoEagoWAKEBggF8AnwAXw1kAXwAXw58A3wAXw98BHwAXxB8BXwAXxF8BnwAXxJ8B3wAXxN8CHwAXxR8CXwAXxV8CnwAXxZ8C3LIfAt8AF8XfAx8AF8YZAFTACkFYTkLAAAKICAgICAgICBDb25zdHJ1Y3QgYSBjb2x1bW4tbGV2ZWwgRk9SRUlHTiBLRVkuCgogICAgICAgIFRoZSA6Y2xhc3M6YC5Gb3JlaWduS2V5YCBvYmplY3Qgd2hlbiBjb25zdHJ1Y3RlZCBnZW5lcmF0ZXMgYQogICAgICAgIDpjbGFzczpgLkZvcmVpZ25LZXlDb25zdHJhaW50YCB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhcmVudAogICAgICAgIDpjbGFzczpgLlRhYmxlYCBvYmplY3QncyBjb2xsZWN0aW9uIG9mIGNvbnN0cmFpbnRzLgoKICAgICAgICA6cGFyYW0gY29sdW1uOiBBIHNpbmdsZSB0YXJnZXQgY29sdW1uIGZvciB0aGUga2V5IHJlbGF0aW9uc2hpcC4gQQogICAgICAgICAgICA6Y2xhc3M6YC5Db2x1bW5gIG9iamVjdCBvciBhIGNvbHVtbiBuYW1lIGFzIGEgc3RyaW5nOgogICAgICAgICAgICBgYHRhYmxlbmFtZS5jb2x1bW5rZXlgYCBvciBgYHNjaGVtYS50YWJsZW5hbWUuY29sdW1ua2V5YGAuCiAgICAgICAgICAgIGBgY29sdW1ua2V5YGAgaXMgdGhlIGBga2V5YGAgd2hpY2ggaGFzIGJlZW4gYXNzaWduZWQgdG8gdGhlIGNvbHVtbgogICAgICAgICAgICAoZGVmYXVsdHMgdG8gdGhlIGNvbHVtbiBuYW1lIGl0c2VsZiksIHVubGVzcyBgYGxpbmtfdG9fbmFtZWBgIGlzCiAgICAgICAgICAgIGBgVHJ1ZWBgIGluIHdoaWNoIGNhc2UgdGhlIHJlbmRlcmVkIG5hbWUgb2YgdGhlIGNvbHVtbiBpcyB1c2VkLgoKICAgICAgICA6cGFyYW0gbmFtZTogT3B0aW9uYWwgc3RyaW5nLiBBbiBpbi1kYXRhYmFzZSBuYW1lIGZvciB0aGUga2V5IGlmCiAgICAgICAgICAgIGBjb25zdHJhaW50YCBpcyBub3QgcHJvdmlkZWQuCgogICAgICAgIDpwYXJhbSBvbnVwZGF0ZTogT3B0aW9uYWwgc3RyaW5nLiBJZiBzZXQsIGVtaXQgT04gVVBEQVRFIDx2YWx1ZT4gd2hlbgogICAgICAgICAgICBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LiBUeXBpY2FsIHZhbHVlcyBpbmNsdWRlIENBU0NBREUsCiAgICAgICAgICAgIERFTEVURSBhbmQgUkVTVFJJQ1QuCgogICAgICAgIDpwYXJhbSBvbmRlbGV0ZTogT3B0aW9uYWwgc3RyaW5nLiBJZiBzZXQsIGVtaXQgT04gREVMRVRFIDx2YWx1ZT4gd2hlbgogICAgICAgICAgICBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LiBUeXBpY2FsIHZhbHVlcyBpbmNsdWRlIENBU0NBREUsCiAgICAgICAgICAgIERFTEVURSBhbmQgUkVTVFJJQ1QuCgogICAgICAgIDpwYXJhbSBkZWZlcnJhYmxlOiBPcHRpb25hbCBib29sLiBJZiBzZXQsIGVtaXQgREVGRVJSQUJMRSBvciBOT1QKICAgICAgICAgICAgREVGRVJSQUJMRSB3aGVuIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuCgogICAgICAgIDpwYXJhbSBpbml0aWFsbHk6IE9wdGlvbmFsIHN0cmluZy4gSWYgc2V0LCBlbWl0IElOSVRJQUxMWSA8dmFsdWU+IHdoZW4KICAgICAgICAgICAgaXNzdWluZyBEREwgZm9yIHRoaXMgY29uc3RyYWludC4KCiAgICAgICAgOnBhcmFtIGxpbmtfdG9fbmFtZTogaWYgVHJ1ZSwgdGhlIHN0cmluZyBuYW1lIGdpdmVuIGluIGBgY29sdW1uYGAgaXMKICAgICAgICAgICAgdGhlIHJlbmRlcmVkIG5hbWUgb2YgdGhlIHJlZmVyZW5jZWQgY29sdW1uLCBub3QgaXRzIGxvY2FsbHkKICAgICAgICAgICAgYXNzaWduZWQgYGBrZXlgYC4KCiAgICAgICAgOnBhcmFtIHVzZV9hbHRlcjogcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nCiAgICAgICAgICAgIDpjbGFzczpgLkZvcmVpZ25LZXlDb25zdHJhaW50YCB0byBpbmRpY2F0ZSB0aGUgY29uc3RyYWludCBzaG91bGQKICAgICAgICAgICAgYmUgZ2VuZXJhdGVkL2Ryb3BwZWQgZXh0ZXJuYWxseSBmcm9tIHRoZSBDUkVBVEUgVEFCTEUvIERST1AgVEFCTEUKICAgICAgICAgICAgc3RhdGVtZW50LiAgU2VlIDpwYXJhbXJlZjpgLkZvcmVpZ25LZXlDb25zdHJhaW50LnVzZV9hbHRlcmAKICAgICAgICAgICAgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24uCgogICAgICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgICAgICA6cGFyYW1yZWY6YC5Gb3JlaWduS2V5Q29uc3RyYWludC51c2VfYWx0ZXJgCgogICAgICAgICAgICAgICAgOnJlZjpgdXNlX2FsdGVyYAoKICAgICAgICA6cGFyYW0gbWF0Y2g6IE9wdGlvbmFsIHN0cmluZy4gSWYgc2V0LCBlbWl0IE1BVENIIDx2YWx1ZT4gd2hlbiBpc3N1aW5nCiAgICAgICAgICAgIERETCBmb3IgdGhpcyBjb25zdHJhaW50LiBUeXBpY2FsIHZhbHVlcyBpbmNsdWRlIFNJTVBMRSwgUEFSVElBTAogICAgICAgICAgICBhbmQgRlVMTC4KCiAgICAgICAgOnBhcmFtIGluZm86IE9wdGlvbmFsIGRhdGEgZGljdGlvbmFyeSB3aGljaCB3aWxsIGJlIHBvcHVsYXRlZCBpbnRvIHRoZQogICAgICAgICAgICA6YXR0cjpgLlNjaGVtYUl0ZW0uaW5mb2AgYXR0cmlidXRlIG9mIHRoaXMgb2JqZWN0LgoKICAgICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4wLjAKCiAgICAgICAgOnBhcmFtIFwqKmRpYWxlY3Rfa3c6ICBBZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBkaWFsZWN0CiAgICAgICAgICAgIHNwZWNpZmljLCBhbmQgcGFzc2VkIGluIHRoZSBmb3JtIGBgPGRpYWxlY3RuYW1lPl88YXJnbmFtZT5gYC4gIFRoZQogICAgICAgICAgICBhcmd1bWVudHMgYXJlIHVsdGltYXRlbHkgaGFuZGxlZCBieSBhIGNvcnJlc3BvbmRpbmcKICAgICAgICAgICAgOmNsYXNzOmAuRm9yZWlnbktleUNvbnN0cmFpbnRgLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIHJlZ2FyZGluZwogICAgICAgICAgICBhbiBpbmRpdmlkdWFsIGRpYWxlY3QgYXQgOnJlZjpgZGlhbGVjdF90b3BsZXZlbGAgZm9yIGRldGFpbCBvbgogICAgICAgICAgICBkb2N1bWVudGVkIGFyZ3VtZW50cy4KCiAgICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuOS4yCgogICAg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IHBsYXRmb3JtcyBpbmRpY2F0ZXMgYSBzdGFydGluZwogICAgICAgICB2YWx1ZSBvZiAxLgogICAgICAgIDpwYXJhbSBpbmNyZW1lbnQ6IHRoZSBpbmNyZW1lbnQgdmFsdWUgb2YgdGhlIHNlcXVlbmNlLiAgVGhpcwogICAgICAgICB2YWx1ZSBpcyB1c2VkIHdoZW4gdGhlIENSRUFURSBTRVFVRU5DRSBjb21tYW5kIGlzIGVtaXR0ZWQgdG8KICAgICAgICAgdGhlIGRhdGFiYXNlIGFzIHRoZSB2YWx1ZSBvZiB0aGUgIklOQ1JFTUVOVCBCWSIgY2xhdXNlLiAgSWYgYGBOb25lYGAsCiAgICAgICAgIHRoZSBjbGF1c2UgaXMgb21pdHRlZCwgd2hpY2ggb24gbW9zdCBwbGF0Zm9ybXMgaW5kaWNhdGVzIGFuCiAgICAgICAgIGluY3JlbWVudCBvZiAxLgogICAgICAgIDpwYXJhbSBtaW52YWx1ZTogdGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIHNlcXVlbmNlLiAgVGhpcwogICAgICAgICB2YWx1ZSBpcyB1c2VkIHdoZW4gdGhlIENSRUFURSBTRVFVRU5DRSBjb21tYW5kIGlzIGVtaXR0ZWQgdG8KICAgICAgICAgdGhlIGRhdGFiYXNlIGFzIHRoZSB2YWx1ZSBvZiB0aGUgIk1JTlZBTFVFIiBjbGF1c2UuICBJZiBgYE5vbmVgYCwKICAgICAgICAgdGhlIGNsYXVzZSBpcyBvbWl0dGVkLCB3aGljaCBvbiBtb3N0IHBsYXRmb3JtcyBpbmRpY2F0ZXMgYQogICAgICAgICBtaW52YWx1ZSBvZiAxIGFuZCAtMl42My0xIGZvciBhc2NlbmRpbmcgYW5kIGRlc2NlbmRpbmcgc2VxdWVuY2VzLAogICAgICAgICByZXNwZWN0aXZlbHkuCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuNwoKICAgICAgICA6cGFyYW0gbWF4dmFsdWU6IHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBzZXF1ZW5jZS4gIFRoaXMKICAgICAgICAgdmFsdWUgaXMgdXNlZCB3aGVuIHRoZSBDUkVBVEUgU0VRVUVOQ0UgY29tbWFuZCBpcyBlbWl0dGVkIHRvCiAgICAgICAgIHRoZSBkYXRhYmFzZSBhcyB0aGUgdmFsdWUgb2YgdGhlICJNQVhWQUxVRSIgY2xhdXNlLiAgSWYgYGBOb25lYGAsCiAgICAgICAgIHRoZSBjbGF1c2UgaXMgb21pdHRlZCwgd2hpY2ggb24gbW9zdCBwbGF0Zm9ybXMgaW5kaWNhdGVzIGEKICAgICAgICAgbWF4dmFsdWUgb2YgMl42My0xIGFuZCAtMSBmb3IgYXNjZW5kaW5nIGFuZCBkZXNjZW5kaW5nIHNlcXVlbmNlcywKICAgICAgICAgcmVzcGVjdGl2ZWx5LgoKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4wLjcKCiAgICAgICAgOnBhcmFtIG5vbWludmFsdWU6IG5vIG1pbmltdW0gdmFsdWUgb2YgdGhlIHNlcXVlbmNlLiAgVGhpcwogICAgICAgICB2YWx1ZSBpcyB1c2VkIHdoZW4gdGhlIENSRUFURSBTRVFVRU5DRSBjb21tYW5kIGlzIGVtaXR0ZWQgdG8KICAgICAgICAgdGhlIGRhdGFiYXNlIGFzIHRoZSB2YWx1ZSBvZiB0aGUgIk5PIE1JTlZBTFVFIiBjbGF1c2UuICBJZiBgYE5vbmVgYCwKICAgICAgICAgdGhlIGNsYXVzZSBpcyBvbWl0dGVkLCB3aGljaCBvbiBtb3N0IHBsYXRmb3JtcyBpbmRpY2F0ZXMgYQogICAgICAgICBtaW52YWx1ZSBvZiAxIGFuZCAtMl42My0xIGZvciBhc2NlbmRpbmcgYW5kIGRlc2NlbmRpbmcgc2VxdWVuY2VzLAogICAgICAgICByZXNwZWN0aXZlbHkuCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuNwoKICAgICAgICA6cGFyYW0gbm9tYXh2YWx1ZTogbm8gbWF4aW11bSB2YWx1ZSBvZiB0aGUgc2VxdWVuY2UuICBUaGlzCiAgICAgICAgIHZhbHVlIGlzIHVzZWQgd2hlbiB0aGUgQ1JFQVRFIFNFUVVFTkNFIGNvbW1hbmQgaXMgZW1pdHRlZCB0bwogICAgICAgICB0aGUgZGF0YWJhc2UgYXMgdGhlIHZhbHVlIG9mIHRoZSAiTk8gTUFYVkFMVUUiIGNsYXVzZS4gIElmIGBgTm9uZWBgLAogICAgICAgICB0aGUgY2xhdXNlIGlzIG9taXR0ZWQsIHdoaWNoIG9uIG1vc3QgcGxhdGZvcm1zIGluZGljYXRlcyBhCiAgICAgICAgIG1heHZhbHVlIG9mIDJeNjMtMSBhbmQgLTEgZm9yIGFzY2VuZGluZyBhbmQgZGVzY2VuZGluZyBzZXF1ZW5jZXMsCiAgICAgICAgIHJlc3BlY3RpdmVseS4KCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMC43CgogICAgICAgIDpwYXJhbSBjeWNsZTogYWxsb3dzIHRoZSBzZXF1ZW5jZSB0byB3cmFwIGFyb3VuZCB3aGVuIHRoZSBtYXh2YWx1ZQogICAgICAgICBvciBtaW52YWx1ZSBoYXMgYmVlbiByZWFjaGVkIGJ5IGFuIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIHNlcXVlbmNlCiAgICAgICAgIHJlc3BlY3RpdmVseS4gIFRoaXMgdmFsdWUgaXMgdXNlZCB3aGVuIHRoZSBDUkVBVEUgU0VRVUVOQ0UgY29tbWFuZAogICAgICAgICBpcyBlbWl0dGVkIHRvIHRoZSBkYXRhYmFzZSBhcyB0aGUgIkNZQ0xFIiBjbGF1c2UuICBJZiB0aGUgbGltaXQgaXMKICAgICAgICAgcmVhY2hlZCwgdGhlIG5leHQgbnVtYmVyIGdlbmVyYXRlZCB3aWxsIGJlIHRoZSBtaW52YWx1ZSBvciBtYXh2YWx1ZSwKICAgICAgICAgcmVzcGVjdGl2ZWx5LiAgSWYgY3ljbGU9RmFsc2UgKHRoZSBkZWZhdWx0KSBhbnkgY2FsbHMgdG8gbmV4dHZhbAogICAgICAgICBhZnRlciB0aGUgc2VxdWVuY2UgaGFzIHJlYWNoZWQgaXRzIG1heGltdW0gdmFsdWUgd2lsbCByZXR1cm4gYW4KICAgICAgICAgZXJyb3IuCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuNwoKICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCBzY2hlbWEgbmFtZSBmb3IgdGhlIHNlcXVlbmNlLCBpZiBsb2NhdGVkCiAgICAgICAgIGluIGEgc2NoZW1hIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQuICBUaGUgcnVsZXMgZm9yIHNlbGVjdGluZyB0aGUKICAgICAgICAgc2NoZW1hIG5hbWUgd2hlbiBhIDpjbGFzczpgLk1ldGFEYXRhYCBpcyBhbHNvIHByZXNlbnQgYXJlIHRoZSBzYW1lCiAgICAgICAgIGFzIHRoYXQgb2YgOnBhcmFtcmVmOmAuVGFibGUuc2NoZW1hYC4KCiAgICAgICAgOnBhcmFtIGNhY2hlOiBvcHRpb25hbCBpbnRlZ2VyIHZhbHVlOyBudW1iZXIgb2YgZnV0dXJlIHZhbHVlcyBpbiB0aGUKICAgICAgICAgc2VxdWVuY2Ugd2hpY2ggYXJlIGNhbGN1bGF0ZWQgaW4gYWR2YW5jZS4gIFJlbmRlcnMgdGhlIENBQ0hFIGtleXdvcmQKICAgICAgICAgdW5kZXJzdG9vZCBieSBPcmFjbGUgYW5kIFBvc3RncmVTUUwuCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEuMTIKCiAgICAgICAgOnBhcmFtIG9yZGVyOiBvcHRpb25hbCBib29sZWFuIHZhbHVlOyBpZiB0cnVlLCByZW5kZXJzIHRoZQogICAgICAgICBPUkRFUiBrZXl3b3JkLCB1bmRlcnN0b29kIGJ5IE9yYWNsZSwgaW5kaWNhdGluZyB0aGUgc2VxdWVuY2UgaXMKICAgICAgICAgZGVmaW5pdGl2ZWx5IG9yZGVyZWQuICAgTWF5IGJlIG5lY2Vzc2FyeSB0byBwcm92aWRlIGRldGVybWluaXN0aWMKICAgICAgICAgb3JkZXJpbmcgdXNpbmcgT3JhY2xlIFJBQy4KCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMS4xMgoKICAgICAgICA6cGFyYW0gb3B0aW9uYWw6IGJvb2xlYW4gdmFsdWUsIHdoZW4gYGBUcnVlYGAsIGluZGljYXRlcyB0aGF0IHRoaXMKICAgICAgICAgOmNsYXNzOmAuU2VxdWVuY2VgIG9iamVjdCBvbmx5IG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZ2VuZXJhdGVkCiAgICAgICAgIG9uIGJhY2tlbmRzIHRoYXQgZG9uJ3QgcHJvdmlkZSBhbm90aGVyIHdheSB0byBnZW5lcmF0ZSBwcmltYXJ5CiAgICAgICAgIGtleSBpZGVudGlmaWVycy4gIEN1cnJlbnRseSwgaXQgZXNzZW50aWFsbHkgbWVhbnMsICJkb24ndCBjcmVhdGUKICAgICAgICAgdGhpcyBzZXF1ZW5jZSBvbiB0aGUgUG9zdGdyZVNRTCBiYWNrZW5kLCB3aGVyZSB0aGUgU0VSSUFMIGtleXdvcmQKICAgICAgICAgY3JlYXRlcyBhIHNlcXVlbmNlIGZvciB1cyBhdXRvbWF0aWNhbGx5Ii4KICAgICAgICA6cGFyYW0gcXVvdGU6IGJvb2xlYW4gdmFsdWUsIHdoZW4gYGBUcnVlYGAgb3IgYGBGYWxzZWBgLCBleHBsaWNpdGx5CiAgICAgICAgIGZvcmNlcyBxdW90aW5nIG9mIHRoZSBzY2hlbWEgbmFtZSBvbiBvciBvZmYuICBXaGVuIGxlZnQgYXQgaXRzCiAgICAgICAgIGRlZmF1bHQgb2YgYGBOb25lYGAsIG5vcm1hbCBxdW90aW5nIHJ1bGVzIGJhc2VkIG9uIGNhc2luZyBhbmQKICAgICAgICAgcmVzZXJ2ZWQgd29yZHMgdGFrZSBwbGFjZS4KICAgICAgICA6cGFyYW0gcXVvdGVfc2NoZW1hOiBzZXQgdGhlIHF1b3RpbmcgcHJlZmVyZW5jZXMgZm9yIHRoZSBgYHNjaGVtYWBgCiAgICAgICAgIG5hbWUuCgogICAgICAgIDpwYXJhbSBtZXRhZGF0YTogb3B0aW9uYWwgOmNsYXNzOmAuTWV0YURhdGFgIG9iamVjdCB3aGljaCB0aGlzCiAgICAgICAgIDpjbGFzczpgLlNlcXVlbmNlYCB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aC4gIEEgOmNsYXNzOmAuU2VxdWVuY2VgCiAgICAgICAgIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgOmNsYXNzOmAuTWV0YURhdGFgIGdhaW5zIHRoZSBmb2xsb3dpbmcKICAgICAgICAgY2FwYWJpbGl0aWVzOgoKICAgICAgICAgKiBUaGUgOmNsYXNzOmAuU2VxdWVuY2VgIHdpbGwgaW5oZXJpdCB0aGUgOnBhcmFtcmVmOmAuTWV0YURhdGEuc2NoZW1hYAogICAgICAgICAgIHBhcmFtZXRlciBzcGVjaWZpZWQgdG8gdGhlIHRhcmdldCA6Y2xhc3M6YC5NZXRhRGF0YWAsIHdoaWNoCiAgICAgICAgICAgYWZmZWN0cyB0aGUgcHJvZHVjdGlvbiBvZiBDUkVBVEUgLyBEUk9QIERETCwgaWYgYW55LgoKICAgICAgICAgKiBUaGUgOm1ldGg6YC5TZXF1ZW5jZS5jcmVhdGVgIGFuZCA6bWV0aDpgLlNlcXVlbmNlLmRyb3BgIG1ldGhvZHMKICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgZW5naW5lIGJvdW5kIHRvIHRoZSA6Y2xhc3M6YC5NZXRhRGF0YWAKICAgICAgICAgICBvYmplY3QsIGlmIGFueS4KCiAgICAgICAgICogVGhlIDptZXRoOmAuTWV0YURhdGEuY3JlYXRlX2FsbGAgYW5kIDptZXRoOmAuTWV0YURhdGEuZHJvcF9hbGxgCiAgICAgICAgICAgbWV0aG9kcyB3aWxsIGVtaXQgQ1JFQVRFIC8gRFJPUCBmb3IgdGhpcyA6Y2xhc3M6YC5TZXF1ZW5jZWAsCiAgICAgICAgICAgZXZlbiBpZiB0aGUgOmNsYXNzOmAuU2VxdWVuY2VgIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55CiAgICAgICAgICAgOmNsYXNzOmAuVGFibGVgIC8gOmNsYXNzOmAuQ29sdW1uYCB0aGF0J3MgYSBtZW1iZXIgb2YgdGhpcwogICAgICAgICAgIDpjbGFzczpgLk1ldGFEYXRhYC4KCiAgICAgICAgIFRoZSBhYm92ZSBiZWhhdmlvcnMgY2FuIG9ubHkgb2NjdXIgaWYgdGhlIDpjbGFzczpgLlNlcXVlbmNlYCBpcwogICAgICAgICBleHBsaWNpdGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgOmNsYXNzOmAuTWV0YURhdGFgIHZpYSB0aGlzIHBhcmFtZXRlci4KCiAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnJlZjpgc2VxdWVuY2VfbWV0YWRhdGFgIC0gZnVsbCBkaXNjdXNzaW9uIG9mIHRoZQogICAgICAgICAgICA6cGFyYW1yZWY6YC5TZXF1ZW5jZS5tZXRhZGF0YWAgcGFy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ICAgICAgICAgZm9yIHRoaXMgY29uc3RyYWludC4KCiAgICAgICAgOnBhcmFtIGluZm86IE9wdGlvbmFsIGRhdGEgZGljdGlvbmFyeSB3aGljaCB3aWxsIGJlIHBvcHVsYXRlZCBpbnRvIHRoZQogICAgICAgICAgICA6YXR0cjpgLlNjaGVtYUl0ZW0uaW5mb2AgYXR0cmlidXRlIG9mIHRoaXMgb2JqZWN0LgoKICAgICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4wLjAKCiAgICAgICAgOnBhcmFtIF9jcmVhdGVfcnVsZToKICAgICAgICAgIGEgY2FsbGFibGUgd2hpY2ggaXMgcGFzc2VkIHRoZSBERExDb21waWxlciBvYmplY3QgZHVyaW5nCiAgICAgICAgICBjb21waWxhdGlvbi4gUmV0dXJucyBUcnVlIG9yIEZhbHNlIHRvIHNpZ25hbCBpbmxpbmUgZ2VuZXJhdGlvbiBvZgogICAgICAgICAgdGhpcyBDb25zdHJhaW50LgoKICAgICAgICAgIFRoZSBBZGRDb25zdHJhaW50IGFuZCBEcm9wQ29uc3RyYWludCBEREwgY29uc3RydWN0cyBwcm92aWRlCiAgICAgICAgICBERExFbGVtZW50J3MgbW9yZSBjb21wcmVoZW5zaXZlICJjb25kaXRpb25hbCBEREwiIGFwcHJvYWNoIHRoYXQgaXMKICAgICAgICAgIHBhc3NlZCBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2hlbiBEREwgaXMgYmVpbmcgaXNzdWVkLiBfY3JlYXRlX3J1bGUKICAgICAgICAgIGlzIGluc3RlYWQgY2FsbGVkIGR1cmluZyBhbnkgQ1JFQVRFIFRBQkxFIGNvbXBpbGF0aW9uLCB3aGVyZSB0aGVyZQogICAgICAgICAgbWF5IG5vdCBiZSBhbnkgdHJhbnNhY3Rpb24vY29ubmVjdGlvbiBpbiBwcm9ncmVzcy4gSG93ZXZlciwgaXQKICAgICAgICAgIGFsbG93cyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiB0aGUgY29uc3RyYWludCBldmVuIGZvciBiYWNrZW5kcwogICAgICAgICAgd2hpY2ggZG8gbm90IHN1cHBvcnQgYWRkaXRp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LCBhZGRpbmcgYQogICAgOmNsYXNzOmAuRm9yZWlnbktleWAgdG8gdGhlIGRlZmluaXRpb24gb2YgYSA6Y2xhc3M6YC5Db2x1bW5gIGlzIGEKICAgIHNob3J0aGFuZCBlcXVpdmFsZW50IGZvciBhbiB1bm5hbWVkLCBzaW5nbGUgY29sdW1uCiAgICA6Y2xhc3M6YC5Gb3JlaWduS2V5Q29uc3RyYWludGAuCgogICAgRXhhbXBsZXMgb2YgZm9yZWlnbiBrZXkgY29uZmlndXJhdGlvbiBhcmUgaW4gOnJlZjpgbWV0YWRhdGFfZm9yZWlnbmtleXNgLgoKICAgIFoWZm9yZWlnbl9rZXlfY29uc3RyYWludE5GYw0AAAAAAAAADgAAAAcAAAALAAAAc8oAAAB0AGoBiABmAXwDfAZ8B3wMZAGcBHwNlwKOAQEAfASIAF8CfAWIAF8DfAmIAF8EfAiIAF8FfAqIAF8GdAd0CHwBgwGDAXQHfAKDAWsDcnh0B3QIfAGDAYMBdAd8AYMBawNybnQJoApkAqEBggFuCnQJoApkA6EBggGHAGYBZARkBYQIfAJEAIMBiABfC3QMagGIAGYBfAGeAo4AAQB8C2QGawlyxnQNiABkB4MCcrx8C4gAag5rCHO8dA+CAYgAoBB8C6EBAQBkBlMAKQhhBwwAAENvbnN0cnVjdCBhIGNvbXBvc2l0ZS1jYXBhYmxlIEZPUkVJR04gS0VZLgoKICAgICAgICA6cGFyYW0gY29sdW1uczogQSBzZXF1ZW5jZSBvZiBsb2NhbCBjb2x1bW4gbmFtZXMuIFRoZSBuYW1lZCBjb2x1bW5zCiAgICAgICAgICBtdXN0IGJlIGRlZmluZWQgYW5kIHByZXNlbnQgaW4gdGhlIHBhcmVudCBUYWJsZS4gVGhlIG5hbWVzIHNob3VsZAogICAgICAgICAgbWF0Y2ggdGhlIGBga2V5YGAgZ2l2ZW4gdG8gZWFjaCBjb2x1bW4gKGRlZmF1bHRzIHRvIHRoZSBuYW1lKSB1bmxlc3MKICAgICAgICAgIGBgbGlua190b19uYW1lYGAgaXMgVHJ1ZS4KCiAgICAgICAgOnBhcmFtIHJlZmNvbHVtbnM6IEEgc2VxdWVuY2Ugb2YgZm9yZWlnbiBjb2x1bW4gbmFtZXMgb3IgQ29sdW1uCiAgICAgICAgICBvYmplY3RzLiBUaGUgY29sdW1ucyBtdXN0IGFsbCBiZSBsb2NhdGVkIHdpdGhpbiB0aGUgc2FtZSBUYWJsZS4KCiAgICAgICAgOnBhcmFtIG5hbWU6IE9wdGlvbmFsLCB0aGUgaW4tZGF0YWJhc2UgbmFtZSBvZiB0aGUga2V5LgoKICAgICAgICA6cGFyYW0gb251cGRhdGU6IE9wdGlvbmFsIHN0cmluZy4gSWYgc2V0LCBlbWl0IE9OIFVQREFURSA8dmFsdWU+IHdoZW4KICAgICAgICAgIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuIFR5cGljYWwgdmFsdWVzIGluY2x1ZGUgQ0FTQ0FERSwKICAgICAgICAgIERFTEVURSBhbmQgUkVTVFJJQ1QuCgogICAgICAgIDpwYXJhbSBvbmRlbGV0ZTogT3B0aW9uYWwgc3RyaW5nLiBJZiBzZXQsIGVtaXQgT04gREVMRVRFIDx2YWx1ZT4gd2hlbgogICAgICAgICAgaXNzdWluZyBEREwgZm9yIHRoaXMgY29uc3RyYWludC4gVHlwaWNhbCB2YWx1ZXMgaW5jbHVkZSBDQVNDQURFLAogICAgICAgICAgREVMRVRFIGFuZCBSRVNUUklDVC4KCiAgICAgICAgOnBhcmFtIGRlZmVycmFibGU6IE9wdGlvbmFsIGJvb2wuIElmIHNldCwgZW1pdCBERUZFUlJBQkxFIG9yIE5PVAogICAgICAgICAgREVGRVJSQUJMRSB3aGVuIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuCgogICAgICAgIDpwYXJhbSBpbml0aWFsbHk6IE9wdGlvbmFsIHN0cmluZy4gSWYgc2V0LCBlbWl0IElOSVRJQUxMWSA8dmFsdWU+IHdoZW4KICAgICAgICAgIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuCgogICAgICAgIDpwYXJhbSBsaW5rX3RvX25hbWU6IGlmIFRydWUsIHRoZSBzdHJpbmcgbmFtZSBnaXZlbiBpbiBgYGNvbHVtbmBgIGlzCiAgICAgICAgICB0aGUgcmVuZGVyZWQgbmFtZSBvZiB0aGUgcmVmZXJlbmNlZCBjb2x1bW4sIG5vdCBpdHMgbG9jYWxseSBhc3NpZ25lZAogICAgICAgICAgYGBrZXlgYC4KCiAgICAgICAgOnBhcmFtIHVzZV9hbHRlcjogSWYgVHJ1ZSwgZG8gbm90IGVtaXQgdGhlIERETCBmb3IgdGhpcyBjb25zdHJhaW50IGFzCiAgICAgICAgICBwYXJ0IG9mIHRoZSBDUkVBVEUgVEFCTEUgZGVmaW5pdGlvbi4gSW5zdGVhZCwgZ2VuZXJhdGUgaXQgdmlhIGFuCiAgICAgICAgICBBTFRFUiBUQUJMRSBzdGF0ZW1lbnQgaXNzdWVkIGFmdGVyIHRoZSBmdWxsIGNvbGxlY3Rpb24gb2YgdGFibGVzCiAgICAgICAgICBoYXZlIGJlZW4gY3JlYXRlZCwgYW5kIGRyb3AgaXQgdmlhIGFuIEFMVEVSIFRBQkxFIHN0YXRlbWVudCBiZWZvcmUKICAgICAgICAgIHRoZSBmdWxsIGNvbGxlY3Rpb24gb2YgdGFibGVzIGFyZSBkcm9wcGVkLgoKICAgICAgICAgIFRoZSB1c2Ugb2YgOnBhcmFtcmVmOmAuRm9yZWlnbktleUNvbnN0cmFpbnQudXNlX2FsdGVyYCBpcwogICAgICAgICAgcGFydGljdWxhcmx5IGdlYXJlZCB0b3dhcmRzIHRoZSBjYXNlIHdoZXJlIHR3byBvciBtb3JlIHRhYmxlcwogICAgICAgICAgYXJlIGVzdGFibGlzaGVkIHdpdGhpbiBhIG11dHVhbGx5LWRlcGVuZGVudCBmb3JlaWduIGtleSBjb25zdHJhaW50CiAgICAgICAgICByZWxhdGlvbnNoaXA7IGhvd2V2ZXIsIHRoZSA6bWV0aDpgLk1ldGFEYXRhLmNyZWF0ZV9hbGxgIGFuZAogICAgICAgICAgOm1ldGg6YC5NZXRhRGF0YS5kcm9wX2FsbGAgbWV0aG9kcyB3aWxsIHBlcmZvcm0gdGhpcyByZXNvbHV0aW9uCiAgICAgICAgICBhdXRvbWF0aWNhbGx5LCBzbyB0aGUgZmxhZyBpcyBub3JtYWxseSBub3QgbmVlZGVkLgoKICAgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4wLjAgIEF1dG9tYXRpYyByZXNvbHV0aW9uIG9mIGZvcmVpZ24ga2V5CiAgICAgICAgICAgICBjeWNsZXMgaGFzIGJlZW4gYWRkZWQsIHJlbW92aW5nIHRoZSBuZWVkIHRvIHVzZSB0aGUKICAgICAgICAgICAgIDpwYXJhbXJlZjpgLkZvcmVpZ25LZXlDb25zdHJhaW50LnVzZV9hbHRlcmAgaW4gdHlwaWNhbCB1c2UKICAgICAgICAgICAgIGNhc2VzLgoKICAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgICAgIDpyZWY6YHVzZV9hbHRlcmAKCiAgICAgICAgOnBhcmFtIG1hdGNoOiBPcHRpb25hbCBzdHJpbmcuIElmIHNldCwgZW1pdCBNQVRDSCA8dmFsdWU+IHdoZW4gaXNzdWluZwogICAgICAgICAgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuIFR5cGljYWwgdmFsdWVzIGluY2x1ZGUgU0lNUExFLCBQQVJUSUFMCiAgICAgICAgICBhbmQgRlVMTC4KCiAgICAgICAgOnBhcmFtIGluZm86IE9wdGlvbmFsIGRhdGEgZGljdGlvbmFyeSB3aGljaCB3aWxsIGJlIHBvcHVsYXRlZCBpbnRvIHRoZQogICAgICAgICAgICA6YXR0cjpgLlNjaGVtYUl0ZW0uaW5mb2AgYXR0cmlidXRlIG9mIHRoaXMgb2JqZWN0LgoKICAgICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4wLjAKCiAgICAgICAgOnBhcmFtIFwqKmRpYWxlY3Rfa3c6ICBBZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBkaWFsZWN0CiAgICAgICAgICBzcGVjaWZpYywgYW5kIHBhc3NlZCBpbiB0aGUgZm9ybSBgYDxkaWFsZWN0bmFtZT5fPGFyZ25hbWU+YGAuICBTZWUKICAgICAgICAgIHRoZSBkb2N1bWVudGF0aW9uIHJlZ2FyZGluZyBhbiBpbmRpdmlkdWFsIGRpYWxlY3QgYXQKICAgICAgICAgIDpyZWY6YGRpYWxlY3RfdG9wbGV2ZWxgIGZvciBkZXRhaWwgb24gZG9jdW1lbnRlZCBhcmd1bWVudHMuCgogICAgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjkuMgoKICAgICAgICApBHIbAAAAcu4AAABy7wAAAHIyAAAAek9Gb3JlaWduS2V5Q29uc3RyYWludCB3aXRoIGR1cGxpY2F0ZSBzb3VyY2UgY29sdW1uIHJlZmVyZW5jZXMgYXJlIG5vdCBzdXBwb3J0ZWQuel9Gb3JlaWduS2V5Q29uc3RyYWludCBudW1iZXIgb2YgY29uc3RyYWluZWQgY29sdW1ucyBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlZCBjb2x1bW5zLmMBAAAAAAAAAAIAAAAOAAAAEwAAAHNCAAAAZwB8AF06fQF0AHwBZgGIAIgAagGIAGoCiABqA4gAagSIAGoFiABqBogAageIAGoIZACcCYgAagmXAo4BkQJxBFMAKQEpCXLjAAAAchsAAAByxgAAAHLtAAAAcuwAAABy3wAAAHLwAAAAcu4AAABy7wAAACkKcuQAAAByGwAAAHLGAAAAcu0AAABy7AAAAHLfAAAAcvAAAABy7gAAAHLvAAAA2g5kaWFsZWN0X2t3YXJncykCcoMAAABaBnJlZmNvbCkBciwAAAByGgAAAHIdAAAAcocAAABJDAAAcwIAAAAGDXoxRm9yZWlnbktleUNvbnN0cmFpbnQuX19pbml0X18uPGxvY2Fscz4uPGxpc3Rjb21wPk5y6wAAACkRcjkBAAByXwAAAHLGAAAAcu0AAABy3wAAAHLsAAAAcvAAAABy/AAAAHJsAAAAchYAAAByUQAAANoIZWxlbWVudHNyQAEAAHLMAAAAcusAAABy/gAAAHIrAAAAKQ5yLAAAAHKTAAAAWgpyZWZjb2x1bW5zchsAAAByxgAAAHLtAAAAcu4AAABy7wAAAHLsAAAAct8AAABy8AAAAHIhAAAAcjIAAABy8gAAAHIaAAAAKQFyLAAAAHIdAAAAcl8AAADPCwAAczIAAAAAVgQBBAECAQIBAgEGAQgCBgEGAQYBBgEGAhQBFAIEAQgHBAEGCgoNCgMQAQgBCgEOAXodRm9yZWlnbktleUNvbnN0cmFpbnQuX19pbml0X19jAwAAAAAAAAADAAAAAwAAAEMAAABzHAAAAHwAagCgAXwBoQEBAHwAagKgA3wCoQEBAGQAUwApAU4pBHKTAAAAcpYAAAByWwEAAHK0AAAAKQNyLAAAAHKYAAAActUAAAByGgAAAHIaAAAAch0AAAByDQEAAF8MAABzBAAAAAABDAF6JEZvcmVpZ25LZXlDb25zdHJhaW50Ll9hcHBlbmRfZWxlbWVudGMBAAAAAAAAAAEAAAAFAAAAQwAAAHMUAAAAdACgAXQCfABqA3wAagSDAqEBUwApAU4pBXIYAAAA2gtPcmRlcmVkRGljdNoDemlw2gtjb2x1bW5fa2V5c3JbAQAAKQFyLAAAAHIaAAAAchoAAAByHQAAANoJX2VsZW1lbnRzcwwAAHMCAAAAAAN6HkZvcmVpZ25LZXlDb25zdHJhaW50Ll9lbGVtZW50c2MBAAAAAAAAAAIAAAACAAAAQwAAAHMcAAAAeBZ8AGoARABdCH0BfAFqAVMAVwBkAFMAZABTACkBTikCclsBAABytgAAACkCciwAAADaBGVsZW1yGgAAAHIaAAAAch0AAABytgAAAHgMAABzBgAAAAACDAEIAnolRm9yZWlnbktleUNvbnN0cmFpbnQuX3JlZmVycmVkX3NjaGVtYWMBAAAAAAAAAAEAAAACAAAAQwAAAHMOAAAAfABqAGQBGQBqAWoCUwApAmFeAQAAVGhlIDpjbGFzczpgLlRhYmxlYCBvYmplY3QgdG8gd2hpY2ggdGhpcwogICAgICAgIDpjbGFzczpgLkZvcmVpZ25LZXlDb25zdHJhaW50YCByZWZlcmVuY2VzLgoKICAgICAgICBUaGlzIGlzIGEgZHluYW1pY2FsbHkgY2FsY3VsYXRlZCBhdHRyaWJ1dGUgd2hpY2ggbWF5IG5vdCBiZSBhdmFpbGFibGUKICAgICAgICBpZiB0aGUgY29uc3RyYWludCBhbmQvb3IgcGFyZW50IHRhYmxlIGlzIG5vdCB5ZXQgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgYSBtZXRhZGF0YSBjb2xsZWN0aW9uIHRoYXQgY29udGFpbnMgdGhlIHJlZmVycmVkIHRhYmxlLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuMAoKICAgICAgICByAQAAACkDclsBAABymAAAAHIhAAAAKQFyLAAAAHIaAAAAchoAAAByHQAAANoOcmVmZXJyZWRfdGFibGV/DAAAcwIAAAAADHojRm9yZWlnbktleUNvbnN0cmFpbnQucmVmZXJyZWRfdGFibGVjAgAAAAAAAAAFAAAABwAAAEMAAABzWgAAAHQAZAFkAoQAfABqAUQAgwGDAX0CZAB8AmsHclZ0AnwCgwFkA2sEclZ0A3wCgwFkBGQFhQIZAFwCfQN9BHQEoAVkBnwBagZ8AGoHfAN8BGYEFgChAYIBZABTACkHTmMBAAAAAAAAAAIAAAAEAAAAUwAAAHMUAAAAZwB8AF0MfQF8AaAAoQCRAnEEUwByGgAAACkBcvgAAAApAnKDAAAAcmABAAByGgAAAHIaAAAAch0AAAByhwAAAI4MAABzAgAAAAYAej1Gb3JlaWduS2V5Q29uc3RyYWludC5fdmFsaWRhdGVfZGVzdF90YWJsZS48bG9jYWxzPi48bGlzdGNvbXA+cgMAAAByAQAAAHIUAAAAekpGb3JlaWduS2V5Q29uc3RyYWludCBvbiAlcyglcykgcmVmZXJzIHRvIG11bHRpcGxlIHJlbW90ZSB0YWJsZXM6ICVzIGFuZCAlcykIcmwAAAByWwEAAHL8AAAAcoAAAAByFgAAAHJRAAAAcnMAAADaEF9jb2xfZGVzY3JpcHRpb24pBXIsAAAAciEAAABaCnRhYmxlX2tleXNaBWVsZW0wWgVlbGVtMXIaAAAAchoAAAByHQAAAHIKAQAAjQwAAHMMAAAAAAEUARQBFAEEAQICeilGb3JlaWduS2V5Q29uc3RyYWludC5fdmFsaWRhdGVfZGVzdF90YWJsZWMBAAAAAAAAAAEAAAADAAAAQwAAAHMoAAAAdAB8AGQBgwJyFHwAagGgAqEAUwBkAmQDhAB8AGoDRACDAVMAZARTACkFYZUBAABSZXR1cm4gYSBsaXN0IG9mIHN0cmluZyBrZXlzIHJlcHJlc2VudGluZyB0aGUgbG9jYWwKICAgICAgICBjb2x1bW5zIGluIHRoaXMgOmNsYXNzOmAuRm9yZWlnbktleUNvbnN0cmFpbnRgLgoKICAgICAgICBUaGlzIGxpc3QgaXMgZWl0aGVyIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXJndW1lbnRzIHNlbnQKICAgICAgICB0byB0aGUgY29uc3RydWN0b3Igb2YgdGhlIDpjbGFzczpgLkZvcmVpZ25LZXlDb25zdHJhaW50YCwKICAgICAgICBvciBpZiB0aGUgY29uc3RyYWludCBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIDpjbGFzczpgLkNvbHVtbmAKICAgICAgICBvYmplY3RzLCBpcyB0aGUgc3RyaW5nIC5rZXkgb2YgZWFjaCBlbGVtZW50LgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuMAoKICAgICAgICBy6wAAAGMBAAAAAAAAAAIAAAAFAAAAUwAAAHMkAAAAZwB8AF0cfQF0AHwBdAGDAnIYfAFqAm4GdAN8AYMBkQJxBFMAchoAAAApBHIfAAAAchAAAAByIgAAANoDc3RyKQJygwAAAHIkAAAAchoAAAByGgAAAHIdAAAAcocAAACoDAAAcwIAAAAGAXo0Rm9yZWlnbktleUNvbnN0cmFpbnQuY29sdW1uX2tleXMuPGxvY2Fscz4uPGxpc3Rjb21wPk4pBHLMAAAAcpMAAAByUgEAAHJCAQAAKQFyLAAAAHIaAAAAchoAAAByHQAAAHJeAQAAlwwAAHMIAAAAAA0KAQoDBgF6IEZvcmVpZ25LZXlDb25zdHJhaW50LmNvbHVtbl9rZXlzYwEAAAAAAAAAAQAAAAMAAABDAAAAcwwAAABkAaAAfABqAaEBUwApAk56AiwgKQJykgAAAHJeAQAAKQFyLAAAAHIaAAAAchoAAAByHQAAAHJiAQAArAwAAHMCAAAAAAJ6JUZvcmVpZ25LZXlDb25zdHJhaW50Ll9jb2xfZGVzY3JpcHRpb25jAgAAAAAAAAAFAAAACgAAAEMAAABzogAAAHQAoAF8AHwBoQIBAHkQdAKgAXwAfAGhAgEAVwBuPAQAdANrCnJYAQB9AgEAeh50BKAFZAF8AWoGfAJqB2QCGQBmAhYAoQGCAVcAZABkAH0CfgJYAFkAbgJYAHg4dAh8AGoJfABqCoMCRABdJlwCfQN9BHQLfARkA4MCcoZ8BGoMfANrCXJqfASgDXwDoQEBAHFqVwB8AKAOfAGhAQEAZABTACkETnpRQ2FuJ3QgY3JlYXRlIEZvcmVpZ25LZXlDb25zdHJhaW50IG9uIHRhYmxlICclcyc6IG5vIGNvbHVtbiBuYW1lZCAnJXMnIGlzIHByZXNlbnQucgEAAABy6wAAACkPcjkBAABypAAAAHJQAQAA2ghLZXlFcnJvcnIWAAAAclEAAABylAAAAHItAAAAcl0BAABykwAAAHJbAQAAcswAAABy6wAAAHIrAAAAcgoBAAApBXIsAAAAciEAAABaAmtlciQAAABy1QAAAHIaAAAAchoAAAByHQAAAHKkAAAAsAwAAHMWAAAAAAEMAgIBEAEQAQQBAgImAxgBFAEOAnogRm9yZWlnbktleUNvbnN0cmFpbnQuX3NldF9wYXJlbnRjAwAAAAAAAAAHAAAADAAAAAsAAABzegAAAHQAZAFkAoQAfABqAUQAgwGHAIcBZgJkA2QChAh8AGoBRACDAXwAagJ8AGoDfABqBHwAagV8AGoGfABqB3wAagh8AGoJZASNCn0EeCR0CnwAagF8BGoBgwJEAF0SXAJ9BX0GfAWgC3wGoQEBAHFaVwB8AKALfAShAVMAKQVOYwEAAAAAAAAAAgAAAAMAAABTAAAAcxQAAABnAHwAXQx9AXwBagBqAZECcQRTAHIaAAAAKQJy6wAAAHIiAAAAKQJygwAAAHKPAAAAchoAAAByGgAAAHIdAAAAcocAAADEDAAAcwIAAAAGAHotRm9yZWlnbktleUNvbnN0cmFpbnQuY29weS48bG9jYWxzPi48bGlzdGNvbXA+YwEAAAAAAAAAAgAAAAYAAAATAAAAczoAAABnAHwAXTJ9AXwBagCIAIgBZABrCXIufAGgAaEAfAFqAmoDagRrAnIuiAFqBW4CZABkAY0CkQJxBFMAKQJOKQJyHAAAAHL1AAAAKQZy8wAAAHL4AAAAcusAAAByIQAAAHIiAAAAchsAAAApAnKDAAAAco8AAAApAnIcAAAAciYAAAByGgAAAHIdAAAAcocAAADGDAAAcwIAAAAGBykIchsAAAByxgAAAHLtAAAAcuwAAABy7gAAAHLvAAAAct8AAABy8AAAACkMcrUAAAByWwEAAHIbAAAAcsYAAABy7QAAAHLsAAAAcu4AAABy7wAAAHLfAAAAcvAAAAByXQEAAHI5AAAAKQdyLAAAAHIcAAAAciYAAAByWwAAAHKEAAAAWgdzZWxmX2ZrWghvdGhlcl9ma3IaAAAAKQJyHAAAAHImAAAAch0AAAByNwAAAMIMAABzHgAAAAABAgEOAgwHCAIEAQQBBAEEAQQBBAEEAQoCGAEOAXoZRm9yZWlnbktleUNvbnN0cmFpbnQuY29weSkKTk5OTk5GRk5OTikCTk4pEnI+AAAAcj8AAAByQAAAAHJBAAAAckIAAAByXwAAAHINAQAAcpMAAAByWwEAAHJDAAAAcl8BAABytgAAAHJhAQAAcgoBAAByXgEAAHJiAQAAcqQAAAByNwAAAHIaAAAAchoAAAByGgAAAHIdAAAAcrUAAADACwAAczAAAAAICwQCBAYAAQABAAEAAQABAAEAAQABAAEKfwAECAQEBgQKDAUMBwwOCAoMFQwECBJytQAAAGMAAAAAAAAAAAAAAAADAAAAAAAAAHNaAAAAZQBaAWQAWgJkAVoDZAJaBIcAZgFkA2QEhAhaBYcAZgFkBWQGhAhaBmQHZAiEAFoHZAlkCoQAWghlCWQLZAyEAIMBWgplC2oMZA1kDoQAgwFaDYcABABaDlMAKQ9ycAAAAGG1DQAAQSB0YWJsZS1sZXZlbCBQUklNQVJZIEtFWSBjb25zdHJhaW50LgoKICAgIFRoZSA6Y2xhc3M6YC5QcmltYXJ5S2V5Q29uc3RyYWludGAgb2JqZWN0IGlzIHByZXNlbnQgYXV0b21hdGljYWxseQogICAgb24gYW55IDpjbGFzczpgLlRhYmxlYCBvYmplY3Q7IGl0IGlzIGFzc2lnbmVkIGEgc2V0IG9mCiAgICA6Y2xhc3M6YC5Db2x1bW5gIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aG9zZSBtYXJrZWQgd2l0aAogICAgdGhlIDpwYXJhbXJlZjpgLkNvbHVtbi5wcmltYXJ5X2tleWAgZmxhZzo6CgogICAgICAgID4+PiBteV90YWJsZSA9IFRhYmxlKCdteXRhYmxlJywgbWV0YWRhdGEsCiAgICAgICAgLi4uICAgICAgICAgICAgICAgICBDb2x1bW4oJ2lkJywgSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgLi4uICAgICAgICAgICAgICAgICBDb2x1bW4oJ3ZlcnNpb25faWQnLCBJbnRlZ2VyLCBwcmltYXJ5X2tleT1UcnVlKSwKICAgICAgICAuLi4gICAgICAgICAgICAgICAgIENvbHVtbignZGF0YScsIFN0cmluZyg1MCkpCiAgICAgICAgLi4uICAgICApCiAgICAgICAgPj4+IG15X3RhYmxlLnByaW1hcnlfa2V5CiAgICAgICAgUHJpbWFyeUtleUNvbnN0cmFpbnQoCiAgICAgICAgICAgIENvbHVtbignaWQnLCBJbnRlZ2VyKCksIHRhYmxlPTxteXRhYmxlPiwKICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5PVRydWUsIG51bGxhYmxlPUZhbHNlKSwKICAgICAgICAgICAgQ29sdW1uKCd2ZXJzaW9uX2lkJywgSW50ZWdlcigpLCB0YWJsZT08bXl0YWJsZT4sCiAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2tleT1UcnVlLCBudWxsYWJsZT1GYWxzZSkKICAgICAgICApCgogICAgVGhlIHByaW1hcnkga2V5IG9mIGEgOmNsYXNzOmAuVGFibGVgIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBieSB1c2luZwogICAgYSA6Y2xhc3M6YC5QcmltYXJ5S2V5Q29uc3RyYWludGAgb2JqZWN0IGV4cGxpY2l0bHk7IGluIHRoaXMgbW9kZSBvZiB1c2FnZSwKICAgIHRoZSAibmFtZSIgb2YgdGhlIGNvbnN0cmFpbnQgY2FuIGFsc28gYmUgc3BlY2lmaWVkLCBhcyB3ZWxsIGFzIG90aGVyCiAgICBvcHRpb25zIHdoaWNoIG1heSBiZSByZWNvZ25pemVkIGJ5IGRpYWxlY3RzOjoKCiAgICAgICAgbXlfdGFibGUgPSBUYWJsZSgnbXl0YWJsZScsIG1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgIENvbHVtbignaWQnLCBJbnRlZ2VyKSwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oJ3ZlcnNpb25faWQnLCBJbnRlZ2VyKSwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oJ2RhdGEnLCBTdHJpbmcoNTApKSwKICAgICAgICAgICAgICAgICAgICBQcmltYXJ5S2V5Q29uc3RyYWludCgnaWQnLCAndmVyc2lvbl9pZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0nbXl0YWJsZV9waycpCiAgICAgICAgICAgICAgICApCgogICAgVGhlIHR3byBzdHlsZXMgb2YgY29sdW1uLXNwZWNpZmljYXRpb24gc2hvdWxkIGdlbmVyYWxseSBub3QgYmUgbWl4ZWQuCiAgICBBbiB3YXJuaW5nIGlzIGVtaXR0ZWQgaWYgdGhlIGNvbHVtbnMgcHJlc2VudCBpbiB0aGUKICAgIDpjbGFzczpgLlByaW1hcnlLZXlDb25zdHJhaW50YAogICAgZG9uJ3QgbWF0Y2ggdGhlIGNvbHVtbnMgdGhhdCB3ZXJlIG1hcmtlZCBhcyBgYHByaW1hcnlfa2V5PVRydWVgYCwgaWYgYm90aAogICAgYXJlIHByZXNlbnQ7IGluIHRoaXMgY2FzZSwgdGhlIGNvbHVtbnMgYXJlIHRha2VuIHN0cmljdGx5IGZyb20gdGhlCiAgICA6Y2xhc3M6YC5QcmltYXJ5S2V5Q29uc3RyYWludGAgZGVjbGFyYXRpb24sIGFuZCB0aG9zZSBjb2x1bW5zIG90aGVyd2lzZQogICAgbWFya2VkIGFzIGBgcHJpbWFyeV9rZXk9VHJ1ZWBgIGFyZSBpZ25vcmVkLiAgVGhpcyBiZWhhdmlvciBpcyBpbnRlbmRlZCB0bwogICAgYmUgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyBiZWhhdmlvci4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDAuOS4yICBVc2luZyBhIG1peHR1cmUgb2YgY29sdW1ucyB3aXRoaW4gYQogICAgICAgOmNsYXNzOmAuUHJpbWFyeUtleUNvbnN0cmFpbnRgIGluIGFkZGl0aW9uIHRvIGNvbHVtbnMgbWFya2VkIGFzCiAgICAgICBgYHByaW1hcnlfa2V5PVRydWVgYCBub3cgZW1pdHMgYSB3YXJuaW5nIGlmIHRoZSBsaXN0cyBkb24ndCBtYXRjaC4KICAgICAgIFRoZSB1bHRpbWF0ZSBiZWhhdmlvciBvZiBpZ25vcmluZyB0aG9zZSBjb2x1bW5zIG1hcmtlZCB3aXRoIHRoZSBmbGFnCiAgICAgICBvbmx5IGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgdGhpcyB3YXJuaW5nCiAgICAgICBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uIGluIGEgZnV0dXJlIHJlbGVhc2UuCgogICAgRm9yIHRoZSB1c2UgY2FzZSB3aGVyZSBzcGVjaWZpYyBvcHRpb25zIGFyZSB0byBiZSBzcGVjaWZpZWQgb24gdGhlCiAgICA6Y2xhc3M6YC5QcmltYXJ5S2V5Q29uc3RyYWludGAsIGJ1dCB0aGUgdXN1YWwgc3R5bGUgb2YgdXNpbmcKICAgIGBgcHJpbWFyeV9rZXk9VHJ1ZWBgIGZsYWdzIGlzIHN0aWxsIGRlc2lyYWJsZSwgYW4gZW1wdHkKICAgIDpjbGFzczpgLlByaW1hcnlLZXlDb25zdHJhaW50YCBtYXkgYmUgc3BlY2lmaWVkLCB3aGljaCB3aWxsIHRha2Ugb24gdGhlCiAgICBwcmltYXJ5IGtleSBjb2x1bW4gY29sbGVjdGlvbiBmcm9tIHRoZSA6Y2xhc3M6YC5UYWJsZWAgYmFzZWQgb24gdGhlCiAgICBmbGFnczo6CgogICAgICAgIG15X3RhYmxlID0gVGFibGUoJ215dGFibGUnLCBtZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oJ2lkJywgSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCd2ZXJzaW9uX2lkJywgSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCdkYXRhJywgU3RyaW5nKDUwKSksCiAgICAgICAgICAgICAgICAgICAgUHJpbWFyeUtleUNvbnN0cmFpbnQobmFtZT0nbXl0YWJsZV9waycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNzcWxfY2x1c3RlcmVkPVRydWUpCiAgICAgICAgICAgICAgICApCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMC45LjIgYW4gZW1wdHkgOmNsYXNzOmAuUHJpbWFyeUtleUNvbnN0cmFpbnRgIG1heSBub3cKICAgICAgIGJlIHNwZWNpZmllZCBmb3IgdGhlIHB1cnBvc2VzIG9mIGVzdGFibGlzaGluZyBrZXl3b3JkIGFyZ3VtZW50cyB3aXRoCiAgICAgICB0aGUgY29uc3RyYWludCwgaW5kZXBlbmRlbnRseSBvZiB0aGUgc3BlY2lmaWNhdGlvbiBvZiAicHJpbWFyeSBr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BwQCctsAAABjAAAAAAAAAAAAAAAAAwAAAEAAAABzTAAAAGUAWgFkAFoCZAFaA2QCWgRkA2QEhABaBWQFZAaEAFoGZQdkB2QIhACDAVoIZBBkCmQLhAFaCWQRZAxkDYQBWgpkDmQPhABaC2QJUwApEnK5AAAAYWQJAABBIHRhYmxlLWxldmVsIElOREVYLgoKICAgIERlZmluZXMgYSBjb21wb3NpdGUgKG9uZSBvciBtb3JlIGNvbHVtbikgSU5ERVguCgogICAgRS5nLjo6CgogICAgICAgIHNvbWV0YWJsZSA9IFRhYmxlKCJzb21ldGFibGUiLCBtZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCJuYW1lIiwgU3RyaW5nKDUwKSksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbigiYWRkcmVzcyIsIFN0cmluZygxMDApKQogICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgSW5kZXgoInNvbWVfaW5kZXgiLCBzb21ldGFibGUuYy5uYW1lKQoKICAgIEZvciBhIG5vLWZyaWxscywgc2luZ2xlIGNvbHVtbiBpbmRleCwgYWRkaW5nCiAgICA6Y2xhc3M6YC5Db2x1bW5gIGFsc28gc3VwcG9ydHMgYGBpbmRleD1UcnVlYGA6OgoKICAgICAgICBzb21ldGFibGUgPSBUYWJsZSgic29tZXRhYmxlIiwgbWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbigibmFtZSIsIFN0cmluZyg1MCksIGluZGV4PVRydWUpCiAgICAgICAgICAgICAgICAgICAgKQoKICAgIEZvciBhIGNvbXBvc2l0ZSBpbmRleCwgbXVsdGlwbGUgY29sdW1ucyBjYW4gYmUgc3BlY2lmaWVkOjoKCiAgICAgICAgSW5kZXgoInNvbWVfaW5kZXgiLCBzb21ldGFibGUuYy5uYW1lLCBzb21ldGFibGUuYy5hZGRyZXNzKQoKICAgIEZ1bmN0aW9uYWwgaW5kZXhlcyBhcmUgc3VwcG9ydGVkIGFzIHdlbGwsIHR5cGljYWxseSBieSB1c2luZyB0aGUKICAgIDpkYXRhOmAuZnVuY2AgY29uc3RydWN0IGluIGNvbmp1bmN0aW9uIHdpdGggdGFibGUtYm91bmQKICAgIDpjbGFzczpgLkNvbHVtbmAgb2JqZWN0czo6CgogICAgICAgIEluZGV4KCJzb21lX2luZGV4IiwgZnVuYy5sb3dlcihzb21ldGFibGUuYy5uYW1lKSkKCiAgICBBbiA6Y2xhc3M6YC5JbmRleGAgY2FuIGFsc28gYmUgbWFudWFsbHkgYXNzb2NpYXRlZCB3aXRoIGEgOmNsYXNzOmAuVGFibGVgLAogICAgZWl0aGVyIHRocm91Z2ggaW5saW5lIGRlY2xhcmF0aW9uIG9yIHVzaW5nCiAgICA6bWV0aDpgLlRhYmxlLmFwcGVuZF9jb25zdHJhaW50YC4gIFdoZW4gdGhpcyBhcHByb2FjaCBpcyB1c2VkLCB0aGUgbmFtZXMKICAgIG9mIHRoZSBpbmRleGVkIGNvbHVtbnMgY2FuIGJlIHNwZWNpZmllZCBhcyBzdHJpbmdzOjoKCiAgICAgICAgVGFibGUoInNvbWV0YWJsZSIsIG1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW4oIm5hbWUiLCBTdHJpbmcoNTApKSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCJhZGRyZXNzIiwgU3RyaW5nKDEwMCkpLAogICAgICAgICAgICAgICAgICAgICAgICBJbmRleCgic29tZV9pbmRleCIsICJuYW1lIiwgImFkZHJlc3MiKQogICAgICAgICAgICAgICAgKQoKICAgIFRvIHN1cHBvcnQgZnVuY3Rpb25hbCBvciBleHByZXNzaW9uLWJhc2VkIGluZGV4ZXMgaW4gdGhpcyBmb3JtLCB0aGUKICAgIDpmdW5jOmAudGV4dGAgY29uc3RydWN0IG1heSBiZSB1c2VkOjoKCiAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCB0ZXh0CgogICAgICAgIFRhYmxlKCJzb21ldGFibGUiLCBtZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCJuYW1lIiwgU3RyaW5nKDUwKSksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbigiYWRkcmVzcyIsIFN0cmluZygxMDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgoInNvbWVfaW5kZXgiLCB0ZXh0KCJsb3dlcihuYW1lKSIpKQogICAgICAgICAgICAgICAgKQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuOS41IHRoZSA6ZnVuYzpgLnRleHRgIGNvbnN0cnVjdCBtYXkgYmUgdXNlZCB0bwogICAgICAgc3BlY2lmeSA6Y2xhc3M6YC5JbmRleGAgZXhwcmVzc2lvbnMsIHByb3ZpZGVkIHRoZSA6Y2xhc3M6YC5JbmRleGAKICAgICAgIGlzIGV4cGxpY2l0bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSA6Y2xhc3M6YC5UYWJsZWAuCgoKICAgIC4uIHNlZWFsc286OgoKICAgICAgICA6cmVmOmBzY2hlbWFfaW5kZXhlc2AgLSBHZW5lcmFsIGluZm9ybWF0aW9uIG9uIDpjbGFzczpgLkluZGV4YC4KCiAgICAgICAgOnJlZjpgcG9zdGdyZXNxbF9pbmRleGVzYCAtIFBvc3RncmVTUUwtc3BlY2lmaWMgb3B0aW9ucyBhdmFpbGFibGUgZm9yCiAgICAgICAgdGhlIDpjbGFzczpgLkluZGV4YCBjb25zdHJ1Y3QuCgogICAgICAgIDpyZWY6YG15c3FsX2luZGV4ZXNgIC0gTXlTUUwtc3BlY2lmaWMgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZQogICAgICAgIDpjbGFzczpgLkluZGV4YCBjb25zdHJ1Y3QuCgogICAgICAgIDpyZWY6YG1zc3FsX2luZGV4ZXNgIC0gTVNTUUwtc3BlY2lmaWMgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZQogICAgICAgIDpjbGFzczpgLkluZGV4YCBjb25zdHJ1Y3QuCgogICAgcrsAAABjAgAAAAAAAAAMAAAABgAAAE8AAABz2gAAAGQBBAB8AF8AfQRnAH0FZwB9Bng2fACgAXwCoQFEAF0oXAR9B30IfQl9CnwKZAFrCXI8fAWgAnwKoQEBAHwGoAJ8B6EBAQBxHlcAfAZ8AF8DdAR8AXwDoAVkAmQBoQKDAnwAXwZ8A6AFZANkBKECfABfB3wDoAVkBWQEoQJ9C2QGfANrBnKSfAOgBWQGoQF8AF8IZAd8A2sGcqR8A6AFZAehAX0EfACgCXwDoQEBAHQKagt8AGYBfAWeAmQFfAtpAY4BAQB8BGQBawly1nwAoAx8BKEBAQBkAVMAKQhhfgQAAENvbnN0cnVjdCBhbiBpbmRleCBvYmplY3QuCgogICAgICAgIDpwYXJhbSBuYW1lOgogICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGluZGV4CgogICAgICAgIDpwYXJhbSBcKmV4cHJlc3Npb25zOgogICAgICAgICAgQ29sdW1uIGV4cHJlc3Npb25zIHRvIGluY2x1ZGUgaW4gdGhlIGluZGV4LiAgIFRoZSBleHByZXNzaW9ucwogICAgICAgICAgYXJlIG5vcm1hbGx5IGluc3RhbmNlcyBvZiA6Y2xhc3M6YC5Db2x1bW5gLCBidXQgbWF5IGFsc28KICAgICAgICAgIGJlIGFyYml0cmFyeSBTUUwgZXhwcmVzc2lvbnMgd2hpY2ggdWx0aW1hdGVseSByZWZlciB0byBhCiAgICAgICAgICA6Y2xhc3M6YC5Db2x1bW5gLgoKICAgICAgICA6cGFyYW0gdW5pcXVlPUZhbHNlOgogICAgICAgICAgICBLZXl3b3JkIG9ubHkgYXJndW1lbnQ7IGlmIFRydWUsIGNyZWF0ZSBhIHVuaXF1ZSBpbmRleC4KCiAgICAgICAgOnBhcmFtIHF1b3RlPU5vbmU6CiAgICAgICAgICAgIEtleXdvcmQgb25seSBhcmd1bWVudDsgd2hldGhlciB0byBhcHBseSBxdW90aW5nIHRvIHRoZSBuYW1lIG9mCiAgICAgICAgICAgIHRoZSBpbmRleC4gIFdvcmtzIGluIHRoZSBzYW1lIG1hbm5lciBhcyB0aGF0IG9mCiAgICAgICAgICAgIDpwYXJhbXJlZjpgLkNvbHVtbi5xdW90ZWAuCgogICAgICAgIDpwYXJhbSBpbmZvPU5vbmU6IE9wdGlvbmFsIGRhdGEgZGljdGlvbmFyeSB3aGljaCB3aWxsIGJlIHBvcHVsYXRlZAogICAgICAgICAgICBpbnRvIHRoZSA6YXR0cjpgLlNjaGVtYUl0ZW0uaW5mb2AgYXR0cmlidXRlIG9mIHRoaXMgb2JqZWN0LgoKICAgICAgICAgICAgLi4gdmVyc2lvbmFk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KTHaCE1ldGFEYXRhYf0CAABBIGNvbGxlY3Rpb24gb2YgOmNsYXNzOmAuVGFibGVgIG9iamVjdHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgc2NoZW1hCiAgICBjb25zdHJ1Y3RzLgoKICAgIEhvbGRzIGEgY29sbGVjdGlvbiBvZiA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0cyBhcyB3ZWxsIGFzCiAgICBhbiBvcHRpb25hbCBiaW5kaW5nIHRvIGFuIDpjbGFzczpgLkVuZ2luZWAgb3IKICAgIDpjbGFzczpgLkNvbm5lY3Rpb25gLiAgSWYgYm91bmQsIHRoZSA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0cwogICAgaW4gdGhlIGNvbGxlY3Rpb24gYW5kIHRoZWlyIGNvbHVtbnMgbWF5IHBhcnRpY2lwYXRlIGluIGltcGxpY2l0IFNRTAogICAgZXhlY3V0aW9uLgoKICAgIFRoZSA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0cyB0aGVtc2VsdmVzIGFyZSBzdG9yZWQgaW4gdGhlCiAgICA6YXR0cjpgLk1ldGFEYXRhLnRhYmxlc2AgZGljdGlvbmFyeS4KCiAgICA6Y2xhc3M6YC5NZXRhRGF0YWAgaXMgYSB0aHJlYWQtc2FmZSBvYmplY3QgZm9yIHJlYWQgb3BlcmF0aW9ucy4KICAgIENvbnN0cnVjdGlvbiBvZiBuZXcgdGFibGVzIHdpdGhpbiBhIHNpbmdsZSA6Y2xhc3M6YC5NZXRhRGF0YWAgb2JqZWN0LAogICAgZWl0aGVyIGV4cGxpY2l0bHkgb3IgdmlhIHJlZmxlY3Rpb24sIG1heSBub3QgYmUgY29tcGxldGVseSB0aHJlYWQtc2FmZS4KCiAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgOnJlZjpgbWV0YWRhdGFfZGVzY3JpYmluZ2AgLSBJbnRyb2R1Y3Rpb24gdG8gZGF0YWJhc2UgbWV0YWRhdGEKCiAgICByXAAAACkCegMwLjh6kFRoZSA6cGFyYW1yZWY6YC5NZXRhRGF0YS5yZWZsZWN0YCBmbGFnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAgIFBsZWFzZSB1c2UgdGhlIDptZXRoOmAuTWV0YURhdGEucmVmbGVjdGAgbWV0aG9kLikB2gdyZWZsZWN0TkZjBwAAAAAAAAAHAAAAAwAAAEMAAABzbAAAAHQAoAGhAHwAXwJ0A3wDfASDAnwAXwR8BXIefAVuAnQFfABfBnwGci58BnwAXwd0CIMAfABfCWkAfABfCnQLoAx0DaEBfABfDnwBfABfD3wCcmh8AXNgdBCgEWQBoQGCAXwAoBKhAAEAZAJTACkDYfMbAABDcmVhdGUgYSBuZXcgTWV0YURhdGEgb2JqZWN0LgoKICAgICAgICA6cGFyYW0gYmluZDoKICAgICAgICAgIEFuIEVuZ2luZSBvciBDb25uZWN0aW9uIHRvIGJpbmQgdG8uICBNYXkgYWxzbyBiZSBhIHN0cmluZyBvciBVUkwKICAgICAgICAgIGluc3RhbmNlLCB0aGVzZSBhcmUgcGFzc2VkIHRvIGNyZWF0ZV9lbmdpbmUoKSBhbmQgdGhpcyBNZXRhRGF0YSB3aWxsCiAgICAgICAgICBiZSBib3VuZCB0byB0aGUgcmVzdWx0aW5nIGVuZ2luZS4KCiAgICAgICAgOnBhcmFtIHJlZmxlY3Q6CiAgICAgICAgICBPcHRpb25hbCwgYXV0b21hdGljYWxseSBsb2FkIGFsbCB0YWJsZXMgZnJvbSB0aGUgYm91bmQgZGF0YWJhc2UuCiAgICAgICAgICBEZWZhdWx0cyB0byBGYWxzZS4gYGBiaW5kYGAgaXMgcmVxdWlyZWQgd2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQuCgogICAgICAgIDpwYXJhbSBzY2hlbWE6CiAgICAgICAgICAgVGhlIGRlZmF1bHQgc2NoZW1hIHRvIHVzZSBmb3IgdGhlIDpjbGFzczpgLlRhYmxlYCwKICAgICAgICAgICA6Y2xhc3M6YC5TZXF1ZW5jZWAsIGFuZCBwb3RlbnRpYWxseSBvdGhlciBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aAogICAgICAgICAgIHRoaXMgOmNsYXNzOmAuTWV0YURhdGFgLiBEZWZhdWx0cyB0byBgYE5vbmVgYC4KCiAgICAgICAgICAgV2hlbiB0aGlzIHZhbHVlIGlzIHNldCwgYW55IDpjbGFzczpgLlRhYmxlYCBvciA6Y2xhc3M6YC5TZXF1ZW5jZWAKICAgICAgICAgICB3aGljaCBzcGVjaWZpZXMgYGBOb25lYGAgZm9yIHRoZSBzY2hlbWEgcGFyYW1ldGVyIHdpbGwgaW5zdGVhZAogICAgICAgICAgIGhhdmUgdGhpcyBzY2hlbWEgbmFtZSBkZWZpbmVkLiAgVG8gYnVpbGQgYSA6Y2xhc3M6YC5UYWJsZWAKICAgICAgICAgICBvciA6Y2xhc3M6YC5TZXF1ZW5jZWAgdGhhdCBzdGlsbCBoYXMgYGBOb25lYGAgZm9yIHRoZSBzY2hlbWEKICAgICAgICAgICBldmVuIHdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgcHJlc2VudCwgdXNlIHRoZSA6YXR0cjpgLkJMQU5LX1NDSEVNQWAKICAgICAgICAgICBzeW1ib2wuCgogICAgICAgICAgIC4uIG5vdGU6OgoKICAgICAgICAgICAgICAgIEFzIHJlZmVycmVkIGFib3ZlLCB0aGUgOnBhcmFtcmVmOmAuTWV0YURhdGEuc2NoZW1hYCBwYXJhbWV0ZXIKICAgICAgICAgICAgICAgIG9ubHkgcmVmZXJzIHRvIHRoZSAqKmRlZmF1bHQgdmFsdWUqKiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0bwogICAgICAgICAgICAgICAgdGhlIDpwYXJhbXJlZjpgLlRhYmxlLnNjaGVtYWAgcGFyYW1ldGVyIG9mIGFuIGluY29taW5nCiAgICAgICAgICAgICAgICA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0LiAgIEl0IGRvZXMgbm90IHJlZmVyIHRvIGhvdyB0aGUKICAgICAgICAgICAgICAgIDpjbGFzczpgLlRhYmxlYCBpcyBjYXRhbG9ndWVkIHdpdGhpbiB0aGUgOmNsYXNzOmAuTWV0YURhdGFgLAogICAgICAgICAgICAgICAgd2hpY2ggcmVtYWlucyBjb25zaXN0ZW50IHZzLiBhIDpjbGFzczpgLk1ldGFEYXRhYCBjb2xsZWN0aW9uCiAgICAgICAgICAgICAgICB0aGF0IGRvZXMgbm90IGRlZmluZSB0aGlzIHBhcmFtZXRlci4gIFRoZSA6Y2xhc3M6YC5UYWJsZWAKICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgOmNsYXNzOmAuTWV0YURhdGFgIHdpbGwgc3RpbGwgYmUga2V5ZWQgYmFzZWQgb24gaXRzCiAgICAgICAgICAgICAgICBzY2hlbWEtcXVhbGlmaWVkIG5hbWUsIGUuZy4KICAgICAgICAgICAgICAgIGBgbXlfbWV0YWRhdGEudGFibGVzWyJzb21lX3NjaGVtYS5teV90YWJsZSJdYGAuCgogICAgICAgICAgICAgICAgVGhlIGN1cnJlbnQgYmVoYXZpb3Igb2YgdGhlIDpjbGFzczpgLkZvcmVpZ25LZXlgIG9iamVjdCBpcyB0bwogICAgICAgICAgICAgICAgY2lyY3VtdmVudCB0aGlzIHJlc3RyaWN0aW9uLCB3aGVyZSBpdCBjYW4gbG9jYXRlIGEgdGFibGUgZ2l2ZW4KICAgICAgICAgICAgICAgIHRoZSB0YWJsZSBuYW1lIGFsb25lLCB3aGVyZSB0aGUgc2NoZW1hIHdpbGwgYmUgYXNzdW1lZCB0byBiZQogICAgICAgICAgICAgICAgcHJlc2VudCBmcm9tIHRoaXMgdmFsdWUgYXMgc3BlY2lmaWVkIG9uIHRoZSBvd25pbmcKICAgICAgICAgICAgICAgIDpjbGFzczpgLk1ldGFEYXRhYCBjb2xsZWN0aW9uLiAgSG93ZXZlciwgdGhpcyBpbXBsaWVzICB0aGF0IGEKICAgICAgICAgICAgICAgIHRhYmxlIHF1YWxpZmllZCB3aXRoIEJMQU5LX1NDSEVNQSBjYW5ub3QgY3VycmVudGx5IGJlIHJlZmVycmVkCiAgICAgICAgICAgICAgICB0byBieSBzdHJpbmcgbmFtZSBmcm9tIDpjbGFzczpgLkZvcmVpZ25LZXlgLiAgICBPdGhlciBwYXJ0cyBvZgogICAgICAgICAgICAgICAgU1FMQWxjaGVteSBzdWNoIGFzIERlY2xhcmF0aXZlIG1heSBub3QgaGF2ZSBzaW1pbGFyIGJlaGF2aW9ycwogICAgICAgICAgICAgICAgYnVpbHQgaW4sIGhvd2V2ZXIgbWF5IGRvIHNvIGluIGEgZnV0dXJlIHJlbGVhc2UsIGFsb25nIHdpdGggYQogICAgICAgICAgICAgICAgY29uc2lzdGVudCBtZXRob2Qgb2YgcmVmZXJyaW5nIHRvIGEgdGFibGUgaW4gQkxBTktfU0NIRU1BLgoKCiAgICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICAgICAgOnBhcmFtcmVmOmAuVGFibGUuc2NoZW1hYAoKICAgICAgICAgICAgICAgIDpwYXJhbXJlZjpgLlNlcXVlbmNlLnNjaGVtYWAKCiAgICAgICAgOnBhcmFtIHF1b3RlX3NjaGVtYToKICAgICAgICAgICAgU2V0cyB0aGUgYGBxdW90ZV9zY2hlbWFgYCBmbGFnIGZvciB0aG9zZSA6Y2xhc3M6YC5UYWJsZWAsCiAgICAgICAgICAgIDpjbGFzczpgLlNlcXVlbmNlYCwgYW5kIG90aGVyIG9iamVjdHMgd2hpY2ggbWFrZSB1c2FnZSBvZiB0aGUKICAgICAgICAgICAgbG9jYWwgYGBzY2hlbWFgYCBuYW1lLgoKICAgICAgICA6cGFyYW0gaW5mbzogT3B0aW9uYWwgZGF0YSBkaWN0aW9uYXJ5IHdoaWNoIHdpbGwgYmUgcG9wdWxhdGVkIGludG8gdGhlCiAgICAgICAgICAgIDphdHRyOmAuU2NoZW1hSXRlbS5pbmZvYCBhdHRyaWJ1dGUgb2YgdGhpcyBvYmplY3QuCgogICAgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuMAoKICAgICAgICA6cGFyYW0gbmFtaW5nX2NvbnZlbnRpb246IGEgZGljdGlvbmFyeSByZWZlcnJpbmcgdG8gdmFsdWVzIHdoaWNoCiAgICAgICAgICB3aWxsIGVzdGFibGlzaCBkZWZhdWx0IG5hbWluZyBjb252ZW50aW9ucyBmb3IgOmNsYXNzOmAuQ29uc3RyYWludGAKICAgICAgICAgIGFuZCA6Y2xhc3M6YC5JbmRleGAgb2JqZWN0cywgZm9yIHRob3NlIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBnaXZlbgogICAgICAgICAgYSBuYW1lIGV4cGxpY2l0bHkuCgogICAgICAgICAgVGhlIGtleXMgb2YgdGhpcyBkaWN0aW9uYXJ5IG1heSBiZToKCiAgICAgICAgICAqIGEgY29uc3RyYWludCBvciBJbmRleCBjbGFzcywgZS5nLiB0aGUgOmNsYXNzOmAuVW5pcXVlQ29uc3RyYWludGAsCiAgICAgICAgICAgIDpjbGFzczpgLkZvcmVpZ25LZXlDb25zdHJhaW50YCBjbGFzcywgdGhlIDpjbGFzczpgLkluZGV4YCBjbGFzcwoKICAgICAgICAgICogYSBzdHJpbmcgbW5lbW9uaWMgZm9yIG9uZSBvZiB0aGUga25vd24gY29uc3RyYWludCBjbGFzc2VzOwogICAgICAgICAgICBgYCJmayJgYCwgYGAicGsiYGAsIGBgIml4ImBgLCBgYCJjayJgYCwgYGAidXEiYGAgZm9yIGZvcmVpZ24ga2V5LAogICAgICAgICAgICBwcmltYXJ5IGtleSwgaW5kZXgsIGNoZWNrLCBhbmQgdW5pcXVlIGNvbnN0cmFpbnQsIHJlc3BlY3RpdmVseS4KCiAgICAgICAgICAqIHRoZSBzdHJpbmcgbmFtZSBvZiBhIHVzZXItZGVmaW5lZCAidG9rZW4iIHRoYXQgY2FuIGJlIHVzZWQKICAgICAgICAgICAgdG8gZGVmaW5lIG5ldyBuYW1pbmcgdG9rZW5zLgoKICAgICAgICAgIFRoZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggImNvbnN0cmFpbnQgY2xhc3MiIG9yICJjb25zdHJhaW50CiAgICAgICAgICBtbmVtb25pYyIga2V5IGFyZSBzdHJpbmcgbmFtaW5nIHRlbXBsYXRlcywgc3VjaCBhcwogICAgICAgICAgYGAidXFfJSh0YWJsZV9uYW1lKXNfJShjb2x1bW5fMF9uYW1lKXMiYGAsCiAgICAgICAgICB3aGljaCBkZXNjcmliZSBob3cgdGhlIG5hbWUgc2hvdWxkIGJlIGNvbXBvc2VkLiAgVGhlIHZhbHVlcwogICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHVzZXItZGVmaW5lZCAidG9rZW4iIGtleXMgc2hvdWxkIGJlIGNhbGxhYmxlcyBvZiB0aGUKICAgICAgICAgIGZvcm0gYGBmbihjb25zdHJhaW50LCB0YWJsZSlgYCwgd2hpY2ggYWNjZXB0cyB0aGUgY29uc3RyYWludC9pbmRleAogICAgICAgICAgb2JqZWN0IGFuZCA6Y2xhc3M6YC5UYWJsZWAgYXMgYXJndW1lbnRzLCByZXR1cm5pbmcgYSBzdHJpbmcKICAgICAgICAgIHJlc3VsdC4KCiAgICAgICAgICBUaGUgYnVpbHQtaW4gbmFtZXMgYXJlIGFzIGZvbGxvd3MsIHNvbWUgb2Ygd2hpY2ggbWF5IG9ubHkgYmUKICAgICAgICAgIGF2YWlsYWJsZSBmb3IgY2VydGFpbiB0eXBlcyBvZiBjb25zdHJhaW50OgoKICAgICAgICAgICAgKiBgYCUodGFibGVfbmFtZSlzYGAgLSB0aGUgbmFtZSBvZiB0aGUgOmNsYXNzOmAuVGFibGVgIG9iamVjdAogICAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29uc3RyYWludC4KCiAgICAgICAgICAgICogYGAlKHJlZmVycmVkX3RhYmxlX25hbWUpc2BgIC0gdGhlIG5hbWUgb2YgdGhlIDpjbGFzczpgLlRhYmxlYAogICAgICAgICAgICAgIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlZmVyZW5jaW5nIHRhcmdldCBvZiBhCiAgICAgICAgICAgICAgOmNsYXNzOmAuRm9yZWlnbktleUNvbnN0cmFpbnRgLgoKICAgICAgICAgICAgKiBgYCUoY29sdW1uXzBfbmFtZSlzYGAgLSB0aGUgbmFtZSBvZiB0aGUgOmNsYXNzOmAuQ29sdW1uYCBhdAogICAgICAgICAgICAgIGluZGV4IHBvc2l0aW9uICIwIiB3aXRoaW4gdGhlIGNvbnN0cmFpbnQuCgogICAgICAgICAgICAqIGBgJShjb2x1bW5fME5fbmFtZSlzYGAgLSB0aGUgbmFtZSBvZiBhbGwgOmNsYXNzOmAuQ29sdW1uYAogICAgICAgICAgICAgIG9iamVjdHMgaW4gb3JkZXIgd2l0aGluIHRoZSBjb25zdHJhaW50LCBqb2luZWQgd2l0aG91dCBhCiAgICAgICAgICAgICAgc2VwYXJhdG9yLgoKICAgICAgICAgICAgKiBgYCUoY29sdW1uXzBfTl9uYW1lKXNgYCAtIHRoZSBuYW1lIG9mIGFsbCA6Y2xhc3M6YC5Db2x1bW5gCiAgICAgICAgICAgICAgb2JqZWN0cyBpbiBvcmRlciB3aXRoaW4gdGhlIGNvbnN0cmFpbnQsIGpvaW5lZCB3aXRoIGFuCiAgICAgICAgICAgICAgdW5kZXJzY29yZSBhcyBhIHNlcGFyYXRvci4KCiAgICAgICAgICAgICogYGAlKGNvbHVtbl8wX2xhYmVsKXNgYCwgYGAlKGNvbHVtbl8wTl9sYWJlbClzYGAsCiAgICAgICAgICAgICAgYGAlKGNvbHVtbl8wX05fbGFiZWwpc2BgIC0gdGhlIGxhYmVsIG9mIGVpdGhlciB0aGUgemVyb3RoCiAgICAgICAgICAgICAgOmNsYXNzOmAuQ29sdW1uYCBvciBhbGwgOmNsYXNzOmAuQ29sdW1uc2AsIHNlcGFyYXRlZCB3aXRoCiAgICAgICAgICAgICAgb3Igd2l0aG91dCBhbiB1bmRlcnNjb3JlCgogICAgICAgICAgICAqIGBgJShjb2x1bW5fMF9rZXkpc2BgLCBgYCUoY29sdW1uXzBOX2tleSlzYGAsCiAgICAgICAgICAgICAgYGAlKGNvbHVtbl8wX05fa2V5KXNgYCAtIHRoZSBrZXkgb2YgZWl0aGVyIHRoZSB6ZXJvdGgKICAgICAgICAgICAgICA6Y2xhc3M6YC5Db2x1bW5gIG9yIGFsbCA6Y2xhc3M6YC5Db2x1bW5zYCwgc2VwYXJhdGVkIHdpdGgKICAgICAgICAgICAgICBvciB3aXRob3V0IGFuIHVuZGVyc2NvcmUKCiAgICAgICAgICAgICogYGAlKHJlZmVycmVkX2NvbHVtbl8wX25hbWUpc2BgLCBgYCUocmVmZXJyZWRfY29sdW1uXzBOX25hbWUpc2BgCiAgICAgICAgICAgICAgYGAlKHJlZmVycmVkX2NvbHVtbl8wX05fbmFtZSlzYGAsICBgYCUocmVmZXJyZWRfY29sdW1uXzBfa2V5KXNgYCwKICAgICAgICAgICAgICBgYCUocmVmZXJyZWRfY29sdW1uXzBOX2tleSlzYGAsIC4uLiAgY29sdW1uIHRva2VucyB3aGljaAogICAgICAgICAgICAgIHJlbmRlciB0aGUgbmFtZXMva2V5cy9sYWJlbHMgb2YgY29sdW1ucyB0aGF0IGFyZSByZWZlcmVuY2VkCiAgICAgICAgICAgICAgYnkgYSAgOmNsYXNzOmAuRm9yZWlnbktleUNvbnN0cmFpbnRgLgoKICAgICAgICAgICAgKiBgYCUoY29uc3RyYWludF9uYW1lKXNgYCAtIGEgc3BlY2lhbCBrZXkgdGhhdCByZWZlcnMgdG8gdGhlCiAgICAgICAgICAgICAgZXhpc3RpbmcgbmFtZSBnaXZlbiB0byB0aGUgY29uc3RyYWludC4gIFdoZW4gdGhpcyBrZXkgaXMKICAgICAgICAgICAgICBwcmVzZW50LCB0aGUgOmNsYXNzOmAuQ29uc3RyYWludGAgb2JqZWN0J3MgZXhpc3RpbmcgbmFtZSB3aWxsIGJlCiAgICAgICAgICAgICAgcmVwbGFjZWQgd2l0aCBvbmUgdGhhdCBpcyBjb21wb3NlZCBmcm9tIHRlbXBsYXRlIHN0cmluZyB0aGF0CiAgICAgICAgICAgICAgdXNlcyB0aGlzIHRva2VuLiBXaGVuIHRoaXMgdG9rZW4gaXMgcHJlc2VudCwgaXQgaXMgcmVxdWlyZWQgdGhhdAogICAgICAgICAgICAgIHRoZSA6Y2xhc3M6YC5Db25zdHJhaW50YCBpcyBnaXZlbiBhbiBleHBsaWNpdCBuYW1lIGFoZWFkIG9mIHRpbWUuCgogICAgICAgICAgICAqIHVzZXItZGVmaW5lZDogYW55IGFkZGl0aW9uYWwgdG9rZW4gbWF5IGJlIGltcGxlbWVudGVkIGJ5IHBhc3NpbmcKICAgICAgICAgICAgICBpdCBhbG9uZyB3aXRoIGEgYGBmbihjb25zdHJhaW50LCB0YWJsZSlgYCBjYWxsYWJsZSB0byB0aGUKICAgICAgICAgICAgICBuYW1pbmdfY29udmVudGlvbiBkaWN0aW9uYXJ5LgoKICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMy4wIC0gYWRkZWQgbmV3IGBgJShjb2x1bW5fME5fbmFtZSlzYGAsCiAgICAgICAgICAgICBgYCUoY29sdW1uXzBfTl9uYW1lKXNgYCwgYW5kIHJlbGF0ZWQgdG9rZW5zIHRoYXQgcHJvZHVjZQogICAgICAgICAgICAgY29uY2F0ZW5hdGlvbnMgb2YgbmFtZXMsIGtleXMsIG9yIGxhYmVscyBmb3IgYWxsIGNvbHVtbnMgcmVmZXJyZWQKICAgICAgICAgICAgIHRvIGJ5IGEgZ2l2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IHRoZW1zZWx2ZXMsIHJlcHJlc2VudGluZyB0aGUKICAgICAgICBvcmRlciBpbiB3aGljaCB0aGV5IGNhbiBiZSBjcmVhdGVkLiAgIFRvIGdldCB0aGUgb3JkZXIgaW4gd2hpY2gKICAgICAgICB0aGUgdGFibGVzIHdvdWxkIGJlIGRyb3BwZWQsIHVzZSB0aGUgYGByZXZlcnNlZCgpYGAgUHl0aG9uIGJ1aWx0LWluLgoKICAgICAgICAuLiB3YXJuaW5nOjoKCiAgICAgICAgICAgIFRoZSA6YXR0cjpgLnNvcnRlZF90YWJsZXNgIGFjY2Vzc29yIGNhbm5vdCBieSBpdHNlbGYgYWNjb21tb2RhdGUKICAgICAgICAgICAgYXV0b21hdGljIHJlc29sdXRpb24gb2YgZGVwZW5kZW5jeSBjeWNsZXMgYmV0d2VlbiB0YWJsZXMsIHdoaWNoCiAgICAgICAgICAgIGFyZSB1c3VhbGx5IGNhdXNlZCBieSBtdXR1YWxseSBkZXBlbmRlbnQgZm9yZWlnbiBrZXkgY29uc3RyYWludHMuCiAgICAgICAgICAgIFRvIHJlc29sdmUgdGhlc2UgY3ljbGVzLCBlaXRoZXIgdGhlCiAgICAgICAgICAgIDpwYXJhbXJlZjpgLkZvcmVpZ25LZXlDb25zdHJhaW50LnVzZV9hbHRlcmAgcGFyYW1ldGVyIG1heSBiZQogICAgICAgICAgICBhcHBsaWVkIHRvIHRob3NlIGNvbnN0cmFpbnRzLCBvciB1c2UgdGhlCiAgICAgICAgICAgIDpmdW5jOmAuc2NoZW1hLnNvcnRfdGFibGVzX2FuZF9jb25zdHJhaW50c2AgZnVuY3Rpb24gd2hpY2ggd2lsbAogICAgICAgICAgICBicmVhayBvdXQgZm9yZWlnbiBrZXkgY29uc3RyYWludHMgaW52b2x2ZWQgaW4gY3ljbGVzIHNlcGFyYXRlbHkuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOmZ1bmM6YC5zY2hlbWEuc29ydF90YWJsZXNgCgogICAgICAgICAgICA6ZnVuYzpgLnNjaGVtYS5zb3J0X3RhYmxlc19hbmRfY29uc3RyYWludHNgCgogICAgICAgICAgICA6YXR0cjpgLk1ldGFEYXRhLnRhYmxlc2AKCiAgICAgICAgICAgIDptZXRoOmAuSW5zcGVjdG9yLmdldF90YWJsZV9uYW1lc2AKCiAgICAgICAgICAgIDptZXRoOmAuSW5zcGVjdG9yLmdldF9zb3J0ZWRfdGFibGVfYW5kX2ZrY19uYW1lc2AKCgogICAgICAgIGMBAAAAAAAAAAEAAAABAAAAUwAAAHMGAAAAfABqAFMAKQFOKQFyIgAAACkBcnoBAAByGgAAAHIaAAAAch0AAAByfgAAAPYPAAByfwAAAHooTWV0YURhdGEuc29ydGVkX3RhYmxlcy48bG9jYWxzPi48bGFtYmRhPikBciIAAAApBXIEAAAAWgtzb3J0X3RhYmxlc3KAAAAAclIAAAByZQEAACkBciwAAAByGgAAAHIaAAAAch0AAADaDXNvcnRlZF90YWJsZXPSDwAAcwQAAAAAIwQBehZNZXRhRGF0YS5zb3J0ZWRfdGFibGVzVGMIAAAAAAAAABEAAAAMAAAACwAAAHPMAQAAfAFkAWsIchB0AIgFgwF9AXwBoAGhAJABj6h9CWQCfAmIAnwGfAd0AoMAZAOcBn0KfAqgA3wIoQEBAIgEZAFrCHJIiAVqBIkEiARkAWsJcliIBHwKZAQ8AHQFoAZ8AWoHagiIBHwJZAWNAqEBiQB8A3KGiACgA3wBagmgCnwJiAShAqEBAQCIBGQBawlyqHQFoAaHBGYBZAZkB4QIiABEAIMBoQF9C24EiAB9C3QCiAVqC4MBiQGIA2QBawhy2ocBhwJmAmQIZAeECHQMiAB8C4MCRACDAX0Mboh0BaANiAOhAZABcgaHAYcChwOHBWYEZAlkB4QIdAyIAHwLgwJEAIMBfQxuXIcAZgFkCmQHhAiIA0QAgwF9DXwNkAFyTogEkAFyLmQLiAQWAJABcDBkDH0OdA6gD2QNfAFqB3wOZA6gEHwNoQFmAxYAoQGCAYcBhwJmAmQPZAeECIgDRACDAX0MeFp8DEQAXVJ9D3kSdBF8D4gFZgJ8Co4BAQBXAG44BAB0DmoSawqQAXK2AQB9EAEAehZ0BaATZBB8D3wQZgIWAKEBAQBXAGQBZAF9EH4QWABZAG4CWACQAXFoVwBXAGQBUQBSAFgAZAFTACkRYSwNAABMb2FkIGFsbCBhdmFpbGFibGUgdGFibGUgZGVmaW5pdGlvbnMgZnJvbSB0aGUgZGF0YWJhc2UuCgogICAgICAgIEF1dG9tYXRpY2FsbHkgY3JlYXRlcyBgYFRhYmxlYGAgZW50cmllcyBpbiB0aGlzIGBgTWV0YURhdGFgYCBmb3IgYW55CiAgICAgICAgdGFibGUgYXZhaWxhYmxlIGluIHRoZSBkYXRhYmFzZSBidXQgbm90IHlldCBwcmVzZW50IGluIHRoZQogICAgICAgIGBgTWV0YURhdGFgYC4gIE1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gcGljayB1cCB0YWJsZXMgcmVjZW50bHkKICAgICAgICBhZGRlZCB0byB0aGUgZGF0YWJhc2UsIGhvd2V2ZXIgbm8gc3BlY2lhbCBhY3Rpb24gaXMgdGFrZW4gaWYgYSB0YWJsZQogICAgICAgIGluIHRoaXMgYGBNZXRhRGF0YWBgIG5vIGxvbmdlciBleGlzdHMgaW4gdGhlIGRhdGFiYXNlLgoKICAgICAgICA6cGFyYW0gYmluZDoKICAgICAgICAgIEEgOmNsYXNzOmAuQ29ubmVjdGFibGVgIHVzZWQgdG8gYWNjZXNzIHRoZSBkYXRhYmFzZTsgaWYgTm9uZSwgdXNlcwogICAgICAgICAgdGhlIGV4aXN0aW5nIGJpbmQgb24gdGhpcyBgYE1ldGFEYXRhYGAsIGlmIGFueS4KCiAgICAgICAgOnBhcmFtIHNjaGVtYToKICAgICAgICAgIE9wdGlvbmFsLCBxdWVyeSBhbmQgcmVmbGVjdCB0YWJsZXMgZnJvbSBhbiBhbHRlcm5hdGUgc2NoZW1hLgogICAgICAgICAgSWYgTm9uZSwgdGhlIHNjaGVtYSBhc3NvY2lhdGVkIHdpdGggdGhpcyA6Y2xhc3M6YC5NZXRhRGF0YWAKICAgICAgICAgIGlzIHVzZWQsIGlmIGFueS4KCiAgICAgICAgOnBhcmFtIHZpZXdzOgogICAgICAgICAgSWYgVHJ1ZSwgYWxzbyByZWZsZWN0IHZpZXdzLgoKICAgICAgICA6cGFyYW0gb25seToKICAgICAgICAgIE9wdGlvbmFsLiAgTG9hZCBvbmx5IGEgc3ViLXNldCBvZiBhdmFpbGFibGUgbmFtZWQgdGFibGVzLiAgTWF5IGJlCiAgICAgICAgICBzcGVjaWZpZWQgYXMgYSBzZXF1ZW5jZSBvZiBuYW1lcyBvciBhIGNhbGxhYmxlLgoKICAgICAgICAgIElmIGEgc2VxdWVuY2Ugb2YgbmFtZXMgaXMgcHJvdmlkZWQsIG9ubHkgdGhvc2UgdGFibGVzIHdpbGwgYmUKICAgICAgICAgIHJlZmxlY3RlZC4gIEFuIGVycm9yIGlzIHJhaXNlZCBpZiBhIHRhYmxlIGlzIHJlcXVlc3RlZCBidXQgbm90CiAgICAgICAgICBhdmFpbGFibGUuICBOYW1lZCB0YWJsZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgYGBNZXRhRGF0YWBgIGFyZQogICAgICAgICAgaWdub3JlZC4KCiAgICAgICAgICBJZiBhIGNhbGxhYmxlIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgYXMgYSBib29sZWFuIHByZWRpY2F0ZSB0bwogICAgICAgICAgZmlsdGVyIHRoZSBsaXN0IG9mIHBvdGVudGlhbCB0YWJsZSBuYW1lcy4gIFRoZSBjYWxsYWJsZSBpcyBjYWxsZWQKICAgICAgICAgIHdpdGggYSB0YWJsZSBuYW1lIGFuZCB0aGlzIGBgTWV0YURhdGFgYCBpbnN0YW5jZSBhcyBwb3NpdGlvbmFsCiAgICAgICAgICBhcmd1bWVudHMgYW5kIHNob3VsZCByZXR1cm4gYSB0cnVlIHZhbHVlIGZvciBhbnkgdGFibGUgdG8gcmVmbGVjdC4KCiAgICAgICAgOnBhcmFtIGV4dGVuZF9leGlzdGluZzogUGFzc2VkIGFsb25nIHRvIGVhY2ggOmNsYXNzOmAuVGFibGVgIGFzCiAgICAgICAgICA6cGFyYW1yZWY6YC5UYWJsZS5leHRlbmRfZXhpc3RpbmdgLgoKICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuOS4xCgogICAgICAgIDpwYXJhbSBhdXRvbG9hZF9yZXBsYWNlOiBQYXNzZWQgYWxvbmcgdG8gZWFjaCA6Y2xhc3M6YC5UYWJsZWAgYXMKICAgICAgICAgIDpwYXJhbXJlZjpgLlRhYmxlLmF1dG9sb2FkX3JlcGxhY2VgLgoKICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuOS4xCgogICAgICAgIDpwYXJhbSByZXNvbHZlX2ZrczogaWYgVHJ1ZSwgcmVmbGVjdCA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0cyBsaW5rZWQKICAgICAgICAgdG8gOmNsYXNzOmAuRm9yZWlnbktleWAgb2JqZWN0cyBsb2NhdGVkIGluIGVhY2ggOmNsYXNzOmAuVGFibGVgLgogICAgICAgICBGb3IgOm1ldGg6YC5NZXRhRGF0YS5yZWZsZWN0YCwgdGhpcyBoYXMgdGhlIGVmZmVjdCBvZiByZWZsZWN0aW5nCiAgICAgICAgIHJlbGF0ZWQgdGFibGVzIHRoYXQgbWlnaHQgb3RoZXJ3aXNlIG5vdCBiZSBpbiB0aGUgbGlzdCBvZiB0YWJsZXMKICAgICAgICAgYmVpbmcgcmVmbGVjdGVkLCBmb3IgZXhhbXBsZSBpZiB0aGUgcmVmZXJlbmNlZCB0YWJsZSBpcyBpbiBhCiAgICAgICAgIGRpZmZlcmVudCBzY2hlbWEgb3IgaXMgb21pdHRlZCB2aWEgdGhlCiAgICAgICAgIDpwYXJhbXJlZjpgLk1ldGFEYXRhLnJlZmxlY3Qub25seWAgcGFyYW1ldGVyLiAgV2hlbiBGYWxzZSwKICAgICAgICAgOmNsYXNzOmAuRm9yZWlnbktleWAgb2JqZWN0cyBhcmUgbm90IGZvbGxvd2VkIHRvIHRoZSA6Y2xhc3M6YC5UYWJsZWAKICAgICAgICAgaW4gd2hpY2ggdGhleSBsaW5rLCBob3dldmVyIGlmIHRoZSByZWxhdGVkIHRhYmxlIGlzIGFsc28gcGFydCBvZiB0aGUKICAgICAgICAgbGlzdCBvZiB0YWJsZXMgdGhhdCB3b3VsZCBiZSByZWZsZWN0ZWQgaW4gYW55IGNhc2UsIHRoZQogICAgICAgICA6Y2xhc3M6YC5Gb3JlaWduS2V5YCBvYmplY3Qgd2lsbCBzdGlsbCByZXNvbHZlIHRvIGl0cyByZWxhdGVkCiAgICAgICAgIDpjbGFzczpgLlRhYmxlYCBhZnRlciB0aGUgOm1ldGg6YC5NZXRhRGF0YS5yZWZsZWN0YCBvcGVyYXRpb24gaXMKICAgICAgICAgY29tcGxldGUuICAgRGVmYXVsdHMgdG8gVHJ1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WgtkDGQNhABaDIcABABaDVMAKQ7aE1RocmVhZExvY2FsTWV0YURhdGFhHwIAAEEgTWV0YURhdGEgdmFyaWFudCB0aGF0IHByZXNlbnRzIGEgZGlmZmVyZW50IGBgYmluZGBgIGluIGV2ZXJ5IHRocmVhZC4KCiAgICBNYWtlcyB0aGUgYGBiaW5kYGAgcHJvcGVydHkgb2YgdGhlIE1ldGFEYXRhIGEgdGhyZWFkLWxvY2FsIHZhbHVlLCBhbGxvd2luZwogICAgdGhpcyBjb2xsZWN0aW9uIG9mIHRhYmxlcyB0byBiZSBib3VuZCB0byBkaWZmZXJlbnQgYGBFbmdpbmVgYAogICAgaW1wbGVtZW50YXRpb25zIG9yIGNvbm5lY3Rpb25zIGluIGVhY2ggdGhyZWFkLgoKICAgIFRoZSBUaHJlYWRMb2NhbE1ldGFEYXRhIHN0YXJ0cyBvZmYgYm91bmQgdG8gTm9uZSBpbiBlYWNoIHRocmVhZC4gIEJpbmRzCiAgICBtdXN0IGJlIG1hZGUgZXhwbGljaXRseSBieSBhc3NpZ25pbmcgdG8gdGhlIGBgYmluZGBgIHByb3BlcnR5IG9yIHVzaW5nCiAgICBgYGNvbm5lY3QoKWBgLiAgWW91IGNhbiBhbHNvIHJlLWJpbmQgZHluYW1pY2FsbHkgbXVsdGlwbGUgdGltZXMgcGVyCiAgICB0aHJlYWQsIGp1c3QgbGlrZSBhIHJlZ3VsYXIgYGBNZXRhRGF0YWBgLgoKICAgIHJcAAAAYwEAAAAAAAAAAQAAAAMAAAADAAAAcyQAAAB0AGoBoAKhAHwAXwNpAHwAXwR0BXQGfACDAqAHoQABAGQBUwApAnogQ29uc3RydWN0IGEgVGhyZWFkTG9jYWxNZXRhRGF0YS5OKQhyGAAAANoJdGhyZWFkaW5n2gVsb2NhbNoHY29udGV4dNodX1RocmVhZExvY2FsTWV0YURhdGFfX2VuZ2luZXNyawAAAHKWAQAAcl8AAAApAXIsAAAAKQFyeQAAAHIaAAAAch0AAAByXwAAAO0QAABzBgAAAAADDAEGAXocVGhyZWFkTG9jYWxNZXRhRGF0YS5fX2luaXRfX2MBAAAAAAAAAAEAAAAEAAAAQwAAAHMOAAAAdAB8AGoBZAFkAoMDUwApA3rqVGhlIGJvdW5k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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-37.pyc
5.57 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
base.cpython-37.pyc
23.16 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
compiler.cpython-37.pyc
93.70 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
crud.cpython-37.pyc
15.01 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
ddl.cpython-37.pyc
36.50 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_comparator.cpython-37.pyc
7.21 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
dml.cpython-37.pyc
31.66 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
elements.cpython-37.pyc
146.00 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
expression.cpython-37.pyc
6.47 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
functions.cpython-37.pyc
32.50 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
naming.cpython-37.pyc
4.67 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
operators.cpython-37.pyc
45.37 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
schema.cpython-37.pyc
142.91 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
selectable.cpython-37.pyc
122.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
sqltypes.cpython-37.pyc
86.91 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
type_api.cpython-37.pyc
47.55 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
23.63 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
visitors.cpython-37.pyc
10.00 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
3.02 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).