MjAwMjA1MTMKIC0gKHN0ZXZlc2spIGFkZCBpbml0aWFsIFJFQURNRS5wcml2c2VwCiAtIChzdGV2ZXNrKSBbY29uZmlndXJlLmFjXSBuaWNlciBtZXNzYWdlOiAtLXdpdGgtcHJpdnNlcC11c2VyPXVzZXIKIC0gKGRqbSkgQWRkIC0td2l0aC1zdXBlcnVzZXItcGF0aD14eHggY29uZmlndXJlIG9wdGlvbiB0byBzcGVjaWZ5IHdoYXQgJFBBVEgKICAgdGhlIHN1cGVydXNlciByZWNlaXZlcy4KIC0gKGRqbSkgQnVnICMyMzE6IFVzZVByaXZpbGVnZVNlcGFyYXRpb24gdHVybnMgb2ZmIEJhbm5lci4KIC0gKGRqbSkgQWRkIC0td2l0aC1wcml2c2VwLXBhdGggY29uZmlndXJlIG9wdGlvbgogLSAoZGptKSBVcGRhdGUgUlBNIHNwZWMgZmlsZTogZGlmZmVyZW50IHN1cGVydXNlciBwYXRoLCB1c2UKICAgL3Zhci9lbXB0eS9zc2hkIGZvciBwcml2c2VwCgoyMDAyMDUxMQogLSAodGltKSBbY29uZmlndXJlLmFjXSBhcHBsaWVkIGEgcmV3b3JrIG9mIGRqbSdzIE9wZW5TU0wgc2VhcmNoIGNsZWFudXAgcGF0Y2guCiAgIE5vdyBvbmx5IHNlYXJjaGVzIHN5c3RlbSBhbmQgL3Vzci9sb2NhbC9zc2wgKE9wZW5TU0wncyBkZWZhdWx0IGluc3RhbGwgcGF0aCkKICAgT3RoZXJzIG11c3QgdXNlIC0td2l0aC1zc2wtZGlyPS4uLi4KIC0gKHRpbSkgW21vbml0b3JfZmRwYXNzLmNdIGZpeCBmb3Igc3lzdGVtcyB0aGF0IGhhdmUgYm90aAogICBIQVZFX0FDQ1JJR0hUU19JTl9NU0dIRFIgYW5kIEhBVkVfQ09OVFJPTF9JTl9NU0dIRFIuIEllLiBzeXMvc29ja2V0LmggaGFzCiAgICNkZWZpbmUgbXNnX2FjY3JpZ2h0cyBtc2dfY29udHJvbAoKMjAwMjA1MTAKIC0gKHN0ZXZlc2spIFthdXRoLmNdIFNoYWRvdyBhY2NvdW50IGFuZCBleHBpcmF0aW9uIGNsZWFudXAuICBOb3cKICAgY2hlY2sgZm9yIHJvb3QgZm9yY2VkIGV4cGlyZS4gIFN0aWxsIGRvbid0IGNoZWNrIGZvciBpbmFjdGl2ZS4KIC0gKGRqbSkgUmV3b3JrIFJlZEhhdCBSUE0gZmlsZXMuIEJhc2VkIG9uIHNwZWMgZnJvbSBOYWxpbiAKICAgRGFoeWFiaGFpIDxuYWxpbkByZWRoYXQuY29tPiBhbmQgcGF0Y2hlcyBmcm9tIAogICBQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPgogLSAoZGptKSBUcnkgdG8gZHJvcCBzdXBwbGVtZW50YWwgZ3JvdXBzIGF0IGRhZW1vbiBzdGFydHVwLiBQYXRjaCBmcm9tIAogICBSZWRIYXQKIC0gKGJhbCkgQmFjayBhbGwgdGhlIHdheSBvdXQgb2YgYXV0aC1wYXNzd2QuYyBjaGFuZ2VzLiAgQnJlYWtzIHRvbyBtYW55CiAgIHRoaW5ncyB0aGF0IGRvbid0IHNldCBwdy0+cHdfcGFzc3dkLgoKMjAwMjA1MDkKIC0gKHRpbSkgW01ha2VmaWxlLmluXSBVbmJyZWFrIG1ha2UgLWYgTWFrZWZpbGUuaW4gZGlzdHByZXAKCjIwMDIwNTA4CiAtICh0aW0pIFtvcGVuYnNkLWNvbXBhdC9ic2QtYXJjNHJhbmRvbS5jXSBmaXggbG9naWMgb24gd2hlbiBzZWVkX3JuZygpIGlzCiAgIGNhbGxlZC4gUmVwb3J0IGJ5IENocmlzIE1heHdlbGwgPG1heHdlbGxAY3MuZGFsLmNhPgogLSAodGltKSBbTWFrZWZpbGUuaW4gY29uZmlndXJlLmFjXSBzZXQgU0hFTEwgdmFyaWFibGUgaW4gTWFrZWZpbGUKIC0gKGRqbSkgRGlzYWJsZSBQQU0ga2JkLWludCBhdXRoIGlmIHByaXZzZXAgaXMgdHVybmVkIG9uIChpdCBkb2Vzbid0IHdvcmspCgoyMDAyMDUwNwogLSAodGltKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmMgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaF0KICAgQWRkIHRydW5jYXRlKCkgZW11bGF0aW9uIHRvIGFkZHJlc3MgQnVnIDIwOAoKMjAwMjA1MDYKIC0gKGRqbSkgVW5icmVhayBhdXRoLXBhc3N3ZC5jIGZvciBQQU0gYW5kIFNJQQogLSAoZGptKSBVbmJyZWFrIFBBTSBhdXRoIGZvciBwcm90b2NvbCAxLiBSZXBvcnQgZnJvbSBQZWtrYSBTYXZvbGEgCiAgIDxwZWtrYXNAbmV0Y29yZS5maT4KIC0gKGRqbSkgRG9uJ3QgcmVpbml0aWFsaXNlIFBBTSBjcmVkZW50aWFscyBiZWZvcmUgd2UgaGF2ZSBzdGFydGVkIFBBTS4KICAgUmVwb3J0IGZyb20gUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4KICAgCjIwMDIwNTA2CiAtIChiYWwpIEZpeGVkIGF1dGgtcGFzc3dkLmMgdG8gcmVzb2x2ZSBQZXJtaXRFbXB0eVBhc3N3b3JkIGlzc3VlCiAKMjAwMjA1MDEKIC0gKGRqbSkgSW1wb3J0IE9wZW5CU0QgcmVncmVzc2lvbiB0ZXN0cy4gUmVxdWlyZXMgQlNEIG1ha2UgdG8gcnVuCiAtIChkam0pIEZpeCByZWFkcGFzc3BoYXNlIGNvbXBpbGF0aW9uIGZvciBzeXN0ZW1zIHdoaWNoIGhhdmUgaXQKCjIwMDIwNDI5CiAtICh0aW0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjXSB1cGRhdGUgZml4VVAgdG8gcmVmbGVjdCBjaGFuZ2VzIGluCiAgIHNzaGRfY29uZmlnLgogLSAodGltKSBbY29udHJpYi9jeWd3aW4vUkVBRE1FXSByZW1vdmUgcmVmZXJlbmNlIHRvIHJlZ2V4LgogICBwYXRjaCBmcm9tIENvcmlubmEgVmluc2NoZW4gPHZpbnNjaGVuQHJlZGhhdC5jb20+CgoyMDAyMDQyNgogLSAoZGptKSBCdWcgIzEzNywgIzIwOTogZml4IG1ha2UgcHJvYmxlbXMgZm9yIHNjYXJkL1NzaC5iaW4sIGRvIHV1ZGVjb2RlCiAgIGR1cmluZyBkaXN0cHJlcCBvbmx5CiAtIChkam0pIERpc2FibGUgUEFNIHBhc3N3b3JkIGV4cGlyeSB1bnRpbCBhIGNvbXBsZXRlIGZpeCBmb3IgYnVnICMxODggZXhpc3RzCiAtIChkam0pIEJ1ZyAjMTgwOiBTZXQgVG9TIGJpdHMgb24gSVB2NC1pbi1JUHY2IG1hcHBlZCBhZGRyZXNzZXMuIEJhc2VkIG9uIAogICBwYXRjaCBmcm9tIG9wZW5zc2hAbWlzYy50ZWNxLm9yZwoKMjAwMjA0MjUKIC0gKHN0ZXZlc2spIFtkZWZpbmVzLmhdIHJlbW92ZSBVU0VfVElNRVZBTDsgdW51c2VkCiAtIChzdGV2ZXNrKSBbYWNjb25maWcuaCBhdXRoLXBhc3N3ZC5jIGNvbmZpZ3VyZS5hYyBzc2hkLmNdIEhQLVVYIDEwLjI2CiAgIHN1cHBvcnQuICBidWcgIzE4NC4gIG1vc3QgZnJvbSBkY29sZUBrZXlzb2Z0c3lzLmNvbS4KCjIwMDIwNDI0CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjMgMTI6NTQ6MTAKICAgICBbdmVyc2lvbi5oXQogICAgIDMuMi4xCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIzIDIyOjE2OjI5CiAgICAgW3NzaGQuY10KICAgICBJbXByb3ZlIGVycm9yIG1lc3NhZ2U7IG9rIG1hcmt1c0Agc3RldmVza0AKCjIwMDIwNDIzCiAtIChzdGV2ZXNrKSBbYWNjb25maWcuaCBjb25maWd1cmUuYWMgc2Vzc2lvbi5jXSBMT0dJTl9OT19FTkRPUFQgZm9yIEhQLVVYCiAtIChzdGV2ZXNrKSBbYWNjb25maWcuaF0gTkVFRF9JTl9TWVNUTV9IIHVudXNlZAogLSAobWFya3VzKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIzIDEyOjU4OjI2CiAgICAgW3JhZGl4LmNdCiAgICAgc2VuZCBjb21wbGV0ZSB0aWNrZXQ7IHNlbWVyYWRAc3MxMDAwLm1zLm1mZi5jdW5pLmN6CiAtIChkam0pIFRyaW0gQ2hhbmdlTG9nIHRvIGluY2x1ZGUgb25seSBwb3N0LTMuMSBjaGFuZ2VzCiAtIChkam0pIFVwZGF0ZSBSUE0gc3BlYyBmaWxlIHZlcnNpb25zCiAtIChkam0pIFJlZGhhdCBzcGVjIGVuYWJsZXMgS3JiViBieSBkZWZhdWx0CiAtIChkam0pIEFwcGxpZWQgT3BlblNDIHNtYXJ0Y2FyZCB1cGRhdGVzIGZyb20gTWFya3VzICYgCiAgIEFudHRpIFRhcGFuaW5lbiA8YWV0QGNjLmh1dC5maT4KIC0gKGRqbSkgRGVmaW5lIEJST0tFTl9SRUFMUEFUSCBmb3IgQUlYLCBwYXRjaCBmcm9tIAogICBBbnR0aSBUYXBhbmluZW4gPGFldEBjYy5odXQuZmk+CiAtIChkam0pIEJ1ZyAjMjE0OiBGaXggdXRtcCBmb3IgSXJpeCAoZG9uJ3Qgc3RyaXAgInR0eSIpLiBQYXRjaCBmcm9tIAogICBLZXZpbiBUYXlsb3IgPG5vQG5vd2hlcmUub3JnPiAoPz8pIHZpYSBQaGlsaXBwIEdyYXUKICAgPHBoZ3JhdUB6ZWRhdC5mdS1iZXJsaW4uZGU+CiAtIChkam0pIEJ1ZyAjMjEzOiBTaW1wbGlmeSBDTVNHX0FMSUdOIG1hY3JvcyB0byBhdm9pZCBzeW1ib2wgY2xhc2hlcy4gCiAgIFJlcG9ydGVkIGJ5IERvdWcgTWFudG9uIDxkbWFudG9uQGVtZWEuYXR0LmNvbT4KIC0gKGRqbSkgQnVnICMyMjI6IEZpeCB0ZXN0cyBmb3IgZ2V0YWRkcmluZm8gb24gT1NGLzEuIFNwb3R0ZWQgYnkKICAgUm9iZXJ0IFVyYmFuIDx1cmJhbkBzcGllbHdpZXNlLmRlPgogLSAoZGptKSBCdWcgIzIwNiAtIGJsaWJwYXRoIGlzbid0IGFsd2F5cyBuZWVkZWQgZm9yIEFJWCBsZCwgYXZvaWQgCiAgIHNpemVvZihsb25nIGxvbmcgaW50KSA9PSA0IGJyZWFrYWdlLiBQYXRjaCBmcm9tIE1hdHRoZXcgQ2xhcmtlCiAgIDxNYXR0aGV3X0NsYXJrZUBtaW5kbGluay5iYy5jYT4KIC0gKGRqbSkgTWFrZSBwcml2c2VwIHdvcmsgd2l0aCBQQU0gKHN0aWxsIGV4cGVyaW1lbnRhbCkKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjAgMDk6MDI6MDMKICAgICBbc2VydmNvbmYuY10KICAgICBObywgYWZzIHJlcXVpcmVzIGV4cGxpY2l0IGVuYWJsaW5nCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIwIDA5OjE0OjU4CiAgICAgW2J1ZmF1eC5jIGJ1ZmF1eC5oXQogICAgIGFkZCBidWZmZXJfe2dldCxwdXR9X3Nob3J0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIwIDA5OjE3OjE5CiAgICAgW3JhZGl4LmNdCiAgICAgcmV3cml0ZSB1c2luZyB0aGUgYnVmZmVyXyogQVBJLCBmaXhlcyBvdmVyZmxvdzsgb2sgZGVyYWFkdEAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIxIDE2OjE5OjI3CiAgICAgW3NzaGQuOCBzc2hkX2NvbmZpZ10KICAgICBkb2N1bWVudCBkZWZhdWx0IEFGU1Rva2VuUGFzc2luZyBubzsgb2sgZGVyYWFkdEAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIxIDE2OjI1OjA2CiAgICAgW3NzaGNvbm5lY3QxLmNdCiAgICAgc3BlbGxpbmcgaW4gZXJyb3IgbWVzc2FnZTsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMiAwNjoxNTo0NwogICAgIFtyYWRpeC5jXQogICAgIGZpeCBjaGVjayBmb3Igb3ZlcmZsb3cKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjIgMTY6MTY6NTMKICAgICBbc2VydmNvbmYuYyBzc2hkLjggc3NoZF9jb25maWddCiAgICAgZG8gbm90IGF1dG8tZW5hYmxlIEtlcmJlcm9zQXV0aGVudGljYXRpb247IG9rIGRqbUAsIHByb3Zvc0AsIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIyIDIxOjA0OjUyCiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIGNsaWVudGxvb3AuaCBzc2guY10KICAgICByZXF1ZXN0IHJlcGx5IChzdWNjZXNzL2ZhaWx1cmUpIGZvciAtUiBzdHlsZSBmd2QgaW4gcHJvdG9jb2wgdjIsCiAgICAgZGVwZW5kcyBvbiBvcmRlcmVkIHJlcGxpZXMuCiAgICAgZml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU7IG9rIHByb3Zvc0AKCjIwMDIwNDIxCiAtICh0aW0pIFtlbnRyb3B5LmMuXSBQb3J0YWJpbGl0eSBmaXggZm9yIFNDTyBVbml4IDMuMnY0LnggKFNDTyBPU1IgMy4wKS4KICAgZW50cm9weS5jIG5lZWRzIHNldGV1aWQoZ2V0dWlkKCkpIGZvciB0aGUgc2V0dWlkKG9yaWdpbmFsX3VpZCkgdG8gc3VjY2VlZC4KICAgUGF0Y2ggYnkgZ2VydEBncmVlbmllLm11Yy5kZS4gVGhpcyBmaXhlcyBvbmUgcGFydCBvZiBCdWcgMjA4CgoyMDAyMDQxOAogLSAoZGptKSBBdm9pZCBTSUdDSExEIGJyZWFrYWdlIHdoZW4gcnVuIGZyb20gcnN5bmMuIEZpeCBmcm9tIAogICBTdHVybGUgU3VuZGUgPHN0dXJsZS5zdW5kZUB1c2l0LnVpby5ubz4KCjIwMDIwNDE3CiAtIChkam0pIFRlbGwgdXNlcnMgdG8gY29uZmlndXJlIC9kZXYvcmFuZG9tIHN1cHBvcnQgaW50byBPcGVuU1NMIGluIElOU1RBTEwKIC0gKGRqbSkgRml4IC5ObSBpbiBtZG9jMm1hbi5wbCBmcm9tIHBzcGVuY2VyQGZpZWxkcy51dG9yb250by5jYQogLSAodGltKSBbY29uZmlndXJlLmFjXSBJc3N1ZSB3YXJuaW5nIG9uIC0td2l0aC1kZWZhdWx0LXBhdGg9L3NvbWVfcGF0aAogICBpZiBMT0dJTl9DQVAgaXMgZW5hYmxlZC4gUmVwb3J0ICYgdGVzdGluZyBieSBUdWMgPHR1Y0B0dHNnLmNvbT4KCjIwMDIwNDE1CiAtIChkam0pIFVuYnJlYWsgIm1ha2UgaW5zdGFsbCIuIEZpeCBmcm9tIERhcnJlbiBUdWNrZXIgPGR0dWNrZXJAemlwLmNvbS5hdT4KIC0gKHN0ZXZlc2spIGJzZC1jeWd3aW5fdXRpbC5bY2hdIEJTRCBsaWNlbnNlIGZyb20gQ29yaW5uYSBWaW5zY2hlbgogLSAodGltKSBbY29uZmlndXJlLmFjXSBhZGQgdGVzdHMgZm9yIHJlY3Ztc2cgYW5kIHNlbmRtc2cuCiAgIFttb25pdG9yX2ZkcGFzcy5jXSBhZGQgY2hlY2tzIGZvciBIQVZFX1NFTkRNU0cgYW5kIEhBVkVfUkVDVk1TRyBmb3IKICAgc3lzdGVtcyB0aGF0IEhBVkVfQUNDUklHSFRTX0lOX01TR0hEUiBidXQgbm8gcmVjdm1zZyBvciBzZW5kbXNnLgoKMjAwMjA0MTQKIC0gKGRqbSkgc3NoLXJhbmQtaGVscGVyIGltcHJvdmVtZW50cwogICAtIEFkZCBjb21tYW5kbGluZSBkZWJ1Z2dpbmcgb3B0aW9ucwogICAtIERvbid0IHdyaXRlIGJpbmFyeSBkYXRhIGlmIHN0ZG91dCBpcyBhIHR0eSAodXNlIGhleCBpbnN0ZWFkKQogICAtIEdpdmUgaXQgYSBtYW5wYWdlCiAtIChkam0pIFJhbmRvbSBudW1iZXIgY29sbGVjdGlvbiBkb2MgZml4ZXMgZnJvbSBCZW4KCjIwMDIwNDEzCiAtIChkam0pIEFkZCBLcmJWIHN1cHBvcnQgcGF0Y2ggZnJvbSBTaW1vbiBXaWxraW5zb24gPHNpbW9uQHN4dy5vcmcudWs+CgoyMDAyMDQxMgogLSAoc3RldmVzaykgW2F1dGgtc2lhLltjaF1dIGFkZCBCU0QgbGljZW5zZSBmcm9tIENocmlzIEFkYW1zCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIGFkZCA8c3lzL3R5cGVzLmg+IHRvIG1zZ2hkciB0ZXN0cy4gQ2hhbmdlIC1MCiAgIHRvIC1oIG9uIHRlc3RpbmcgZm9yIC9iaW4gYmVpbmcgc3ltYm9saWMgbGluawogLSAoYmFsKSBNaXN0YWtlbiBpbiBDeWd3aW4gc2NyaXB0cyBmb3Igc3NoIHN0YXJ0aW5nLiAgUGF0Y2ggYnkKICAgQ29yaW5uYSBWaW5zY2hlbiA8dmluc2NoZW5AcmVkaGF0LmNvbT4gCiAtIChiYWwpIGRpc2FibGUgcHJpdnNlcCBpZiBubyBNQVBfQU5PTi4gIFdlIGNhbiByZS1lbmFibGUgaXQKICAgYWZ0ZXIgdGhlIHJlbGVhc2Ugd2hlbiB3ZSBjYW4gZG8gbW9yZSB0ZXN0aW5nLgoKMjAwMjA0MTEKIC0gKHN0ZXZlc2spIFthdXRoLXNpYS5jXSBjbGVhbnVwCiAtICh0aW0pIFthY2NvbmZpZy5oIGRlZmluZXMuaCBpbmNsdWRlcy5oXSBwdXQgaW5jbHVkZXMgaW4gaW5jbHVkZXMuaCBhbmQKICAgZGVmaW5lcyBpbiBkZWZpbmVzLmggW3Jpam5kYWVsLmMgb3BlbmJzZC1jb21wYXQvZmFrZS1zb2NrZXQuaAogICBvcGVuYnNkLWNvbXBhdC9pbmV0X2F0b24uY10gaW5jbHVkZSAiaW5jbHVkZXMuaCIgaW5zdGVhZCBvZiAiY29uZmlnLmgiCiAgIG9rIHN0ZXZlc2tACgoyMDAyMDQxMAogLSAoc3RldmVzaykgW2NvbmZpZ3VyZS5hYyBtb25pdG9yLmNdIEhBVkVfU09DS0VUUEFJUgogLSAoc3RldmVzaykgW2F1dGgtc2lhLmNdIGNvbXBpbGUgZml4IENocmlzIEFkYW1zIDxjbWFkYW1zQGhpd2FheS5uZXQ+CiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMTAgMDg6MjE6NDcKICAgICBbYXV0aDEuYyBjb21wYXQuYyBjb21wYXQuaF0KICAgICBzdHJpcCAnQCcgZnJvbSB1c2VybmFtZSBvbmx5IGZvciBLZXJiViBhbmQga25vd24gYnJva2VuIGNsaWVudHMsIGJ1ZyAjMjA0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzEwIDA4OjU2OjAxCiAgICAgW3ZlcnNpb24uaF0KICAgICBPcGVuU1NIXzMuMgogLSBBZGRlZCBwMSB0byBpZGVuaWZ5IFBvcnRhYmxlIHJlbGVhc2UgdmVyc2lvbi4KCjIwMDIwNDA4CiAtIChiYWwpIE1pbm9yIE9wZW5TQyB1cGRhdGVzLiAgRml4IHVwIGhlYWRlciBsb2NhdGlvbnMgYW5kIHVwZGF0ZQogICBSRUFETUUuc21hcnRjYXJkIHByb3ZpZGVkIGJ5IEp1aGEgWXJq9mzkIDxqeXJqb2xhQGNjLmh1dC5maT4KCjIwMDIwNDA3CiAtIChzdGV2ZXNrKSBIQVZFX0NPTlRST0xfSU5fTVNHSERSOyBub3QgdXNlZCByaWdodCBub3cuCiAgIEZ1dHVyZTogd2UgbWF5IHdhbnQgdG8gdGVzdCBpZiBmZCBwYXNzaW5nIHdvcmtzIGNvcnJlY3RseS4KIC0gKHN0ZXZlc2spIFttb25pdG9yX2ZkcGFzcy5jXSBmYXRhbCgpIGZvciBVc2VQcml2aWxlZ2VTZXBhcmF0aW9uPXllcwogICBhbmQgbm8gZmQgcGFzc2luZyBzdXBwb3J0LgogLSAoc3RldmVzaykgSEFWRV9NTUFQIGFuZCBIQVZFX1NZU19NTUFOX0ggYW5kIHVzZSB0aGVtIGluCiAgIG1vbml0b3JfbW0uYwogLSAoc3RldmVzaykgcmVtb3ZlIGNvbmZpZ3VyZSBzdXBwb3J0IGZvciBwb2xsLmg7IGl0IHdhcyByZW1vdmVkCiAgIGZyb20gc3NoZC5jIGEgbG9uZyB0aW1lIGFnby4KIC0gKHN0ZXZlc2spIC0td2l0aC1wcml2c2VwLXVzZXI7IGRlZmF1bHQgc3NoZAogLSAoc3RldmVzaykgd3JhcCBtdW5tYXAoKSB3aXRoIEhBVkVfTU1BUCBhbHNvLgoKMjAwMjA0MDYKIC0gKGRqbSkgVHlwbyBpbiBTdXNlIFNQRUMgZmlsZS4gRml4IGZyb20gQ2Fyc3RlbiBHcm9obWFubiAKICAgPGNhcnN0ZW4uZ3JvaG1hbm5AZHItYmFsZGV3ZWcuZGU+CiAtIChiYWwpIEFkZGVkIE1BUF9GQUlMRUQgdG8gYWxsb3cgQUlYIGFuZCBUcnVzdGVkIEhQIHRvIGNvbXBpbGUuCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDYgMDA6MzA6MDgKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBGaXggb2NjYXNpb25hbCBjb3JydXB0aW9uIG9uIHVwbG9hZCBkdWUgdG8gYmFkIHJldXNlIG9mIHJlcXVlc3QgCiAgICAgaWQsIHNwb3R0ZWQgYnkgY2hvbWJpZXJAbWFjLmNvbTsgb2sgbWFya3VzQAogICAtIG1vdXJpbmdAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDYgMTg6MjQ6MDkKICAgICBbc2NwLmNdCiAgICAgRml4ZXMgcG90ZW50YWwgZG91YmxlIC8vIHdpdGhpbiBwYXRoLgogICAgIGh0dHA6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYKIC0gKGJhbCkgU2xpZ2h0IHVwZGF0ZSB0byBPcGVuU0Mgc3VwcG9ydC4gIEJldHRlciB2ZXJzaW9uIGNoZWNraW5nLiBwYXRjaAogICBieSBKdWhhIFlyavZs5CA8anlyam9sYUBjYy5odXQuZmk+IAogLSAoYmFsKSBSZXZlcmVkIG91dCBvZiBydW50aW1lIElSSVggZGV0ZWN0aW9uIG9mIGpvYmxpbWl0cy4gIENvZGUgaXMKICAgaW5jb21wbGV0ZS4KIC0gKGJhbCkgUXVpZXQgZG93biBjb25maWd1cmUuYWMgaWYgL2Jpbi90ZXN0IGRvZXMgbm90IGV4aXN0LgogLSAoYmFsKSBXZSBubyBsb25nZXIgdXNlIGF0ZXhpdCgpL3hhdGV4aXQoKS9vbl9leGl0KCkKCjIwMDIwNDA1CiAtIChiYWwpIFBhdGNoIGZvciBPcGVuU0MgU21hcnRDYXJkIGxpYnJhcnk7IG9rIG1hcmt1c0A7IHBhdGNoIGJ5CiAgIEp1aGEgWXJq9mzkIDxqeXJqb2xhQGNjLmh1dC5maT4KIC0gKGJhbCkgTWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGUgdG8gcmVmbGVjdCBzbWFydGNhcmQgbGlicmFyeQogICBzdXBwb3J0IGNoYW5nZXMuCiAtIChiYWwpIFRvbyBtYW55IDxzeXMvcXVldWUuaD4gaXNzdWVzLiAgUmVtb3ZlIGFsbCB3b3JrYXJvdW5kcyBhbmQKICAgdXNpbmcgaW50ZXJuYWwgdmVyc2lvbiBvbmx5LgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wNSAyMDo1NjoyMQogICAgIFtzc2hkLjhdCiAgICAgY2xhcmlmeSBzc2hyYyBzb21lIGFuZCBoYW5kbGUgWDExVXNlTG9jYWxob3N0PXllczsgb2sgbWFya3VzQAoKMjAwMjA0MDQKIC0gKHN0ZXZlc2spIFthdXRoLXBhbS5jIGF1dGgtcGFtLmggYXV0aC1wYXNzd2QuYyBhdXRoLXNpYS5jIGF1dGgtc2lhLmgKICAgIGF1dGgxLmMgYXV0aDIuY10gUEFNLCBPU0ZfU0lBIHBhc3N3b3JkIGF1dGggY2xlYW51cDsgZnJvbSBkam0uCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDMgMDk6MjY6MTEKICAgICBbY2lwaGVyLmMgbXlwcm9wb3NhbC5oXQogICAgIHJlLWFkZCByaWpuZGFlbC1jYmNAbHlzYXRvci5saXUuc2UgZm9yIE1hY1NTSDsgYXNoQGxhYi5wb2MubmV0CgoyMDAyMDQwMgogLSAoYmFsKSBIYW5kIFN5bmMgb2Ygc2NwLmMgKHJldmVydGVkIHRvIHVwc3RyZWFtIGNvZGUpCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8zMCAxNzo0NTo0NgogICAgIFtzY3AuY10KICAgICBzdHJldGNoIGJhbm5lcnMKIC0gKGJhbCkgQ1ZTIElEIHN5bmMgb2YgdWlkc3dhcC5jCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMgKG5vdyBmb3IgdGhlIHJlYWwgc3luYykKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjcgMjI6MjE6NDUKICAgICBbc3NoLWtleWdlbi5jXQogICAgIHRyeSB0byBpbXBvcnQga2V5cyB3aXRoIGV4dHJhIHRyYWlsaW5nID09PSAoc2VlbiB3aXRoIHNzaC5jb20gPCAyLjAuMTIpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI4IDE1OjM0OjUxCiAgICAgW3Nlc3Npb24uY10KICAgICBkbyBub3QgY2FsbCByZWNvcmRfbG9naW4gdHdpY2UgKGZvciB1c2VfcHJpdnNlcCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjkgMTg6NTk6MzIKICAgICBbc2Vzc2lvbi5jIHNlc3Npb24uaF0KICAgICByZXRyaWV2ZSBsYXN0IGxvZ2luIHRpbWUgYmVmb3JlIHRoZSBwdHkgaXMgYWxsb2NhdGVkLCBzdG9yZSBwZXIgc2Vzc2lvbgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjkgMTk6MTY6MjIKICAgICBbc3NoZC44XQogICAgIFJTQSBrZXkgbW9kdWx1cyBzaXplIG1pbmltdW0gNzY4OyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yOSAxOToxODozMwogICAgIFthdXRoLXJzYS5jIHNzaC1yc2EuYyBzc2guaF0KICAgICBtYWtlIFJTQSBtb2R1bHVzIG1pbmltdW0gI2RlZmluZTsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8zMCAxODo1MToxNQogICAgIFttb25pdG9yLmMgc2VydmVybG9vcC5jIHNmdHAtaW50LmMgc2Z0cC5jIHNzaGQuY10KICAgICBjaGVjayB3YWl0cGlkIGZvciBFSU5UUjsgYmFzZWQgb24gcGF0Y2ggZnJvbSBwZXRlckBpZm0ubGl1LnNlCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzAxIDIyOjAyOjE2CiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgMjA0ODAgaXMgYW4gdXBwZXIgbGltaXQgZm9yIG9sZGVyIHNlcnZlcgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wMSAyMjowNzoxNwogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIGZhbGxiYWNrIHRvIHN0YXQgaWYgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgbHN0YXQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDIgMTE6NDk6MzkKICAgICBbc3NoLWFnZW50LmNdCiAgICAgY2hlY2sgJFNIRUxMIGZvciAtayBhbmQgLWQsIHRvbzsKICAgICBodHRwOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wMiAxNzozNzo0OAogICAgIFtzZnRwLmNdCiAgICAgYWx3YXlzIGNhbGwgbG9nX2luaXQoKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wMiAyMDoxMTozOAogICAgIFtzc2gtcnNhLmNdCiAgICAgaWdub3JlIFNTSF9CVUdfU0lHQkxPQiBmb3Igc3NoLXJzYTsgIzE4NwogLSAoYmFsKSBtaXNwZWxsaW5nIGluIHVpZHN3YXAuYyAocG9ydGFibGUgb25seSkKCjIwMDIwNDAxCiAtIChzdGV2ZXNrKSBbbW9uaXRvci5jXSBQQU0gc2hvdWxkIHdvcmsgYWdhaW47IHdpbGwgKm5vdCogd29yayB3aXRoCiAgIFVzZVByaXZpbGVnZVNlcGFyYXRpb249eWVzLgogLSAoc3RldmVzaykgW2F1dGgxLmNdIGZpeCBwYXNzd29yZCBhdXRoIGZvciBwcm90b2NvbCAxIHdoZW4KICAgIVVTRV9QQU0gJiYgIUhBVkVfT1NGX1NJQTsgbWVyZ2UgaXNzdWUuCgoyMDAyMDMzMQogLSAodGltKSBbY29uZmlndXJlLmFjXSB1c2UgL2Jpbi90ZXN0IC1MIHRvIHdvcmsgYXJvdW5kIGJyb2tlbiBidWlsdGluIG9uCiAgIFNvbGFyaXMgOAogLSAodGltKSBbc3NoY29ubmVjdDIuY10gY2hhbmdlIHVpbnQzMl90IHRvIHVfaW50MzJfdAoKMjAwMjAzMzAKIC0gKHN0ZXZlc2spIFtjb25maWd1cmUuYWNdIHJlbW92ZSBoZWFkZXIgY2hlY2sgZm9yIHN5cy90dGNvbXBhdC5oCiAgIGJ1ZyAxNjcKCjIwMDIwMzI3CiAtIChiYWwpICdwdycgc2hvdWxkIGJlICdhdXRoY3R4dC0+cHcnIGluIGF1dGgxLmMgc3BvdHRlZCBieSAKICAga2VudEBseXNhdG9yLmxpdS5zZQogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDExOjM0OjQ5CiAgICAgW3NzaC4xIHNzaGQuOF0KICAgICB1cGRhdGUgdG8gcmVjZW50IGRyYWZ0cwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAxMTozNzowNQogICAgIFtzc2guY10KICAgICB1cGRhdGUgQ29weXJpZ2h0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDE1OjIzOjQwCiAgICAgW2J1ZmF1eC5jXQogICAgIGRvIG5vdCB0YWxrIGFib3V0IHBhY2tldHMgaW4gYnVmYXV4CiAgIC0gcmVlc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAxODo0Njo1OQogICAgIFtzY2FyZC5jXQogICAgIHRyeV9BVVQwIGluIHJlYWRfcHVia2V5IHRvbywgZm9yIHRob3NlIHBhcmFub2lkIGZldyB3aG8gd2FudCB0byBhY2wgJ3NoJwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAyMjo1MDozOQogICAgIFtjaGFubmVscy5oXQogICAgIENIQU5ORUxfRUZEX09VVFBVVF9BQ1RJVkUgaXMgZmFsc2UgZm9yIENIQU5fQ0xPU0VfUkNWRCwgdG9vCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDIzOjEzOjAzCiAgICAgW2F1dGgtcnNhLmNdCiAgICAgZGlzYWxsb3cgUlNBIGtleXMgPCA3NjggZm9yIHByb3RvY29sIDEsIHRvbyAocmhvc3RzLXJzYSBhbmQgcnNhIGF1dGgpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDIzOjE0OjUxCiAgICAgW2tleC5jXQogICAgIGdlbmVyYXRlIGEgbmV3IGNvb2tpZSBmb3IgZWFjaCBTU0gyX01TR19LRVhJTklUIG1lc3NhZ2Ugd2Ugc2VuZCBvdXQKICAgLSBtb3VyaW5nQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI3IDExOjQ1OjQyCiAgICAgW21vbml0b3IuY10KICAgICBtb25pdG9yX2FsbG93ZWRfa2V5KCkgcmV0dXJucyBpbnQgaW5zdGVhZCBvZiBwb2ludGVyLiAgb2sgbWFya3VzQAogIAoyMDAyMDMyNQogLSAoc3RldmVzaykgaW1wb3J0IE9wZW5CU0QgPHN5cy90cmVlLmg+IGFzICJvcGVuYnNkLWNvbXBhdC90cmVlLmgiCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIzIDIwOjU3OjI2CiAgICAgW3NzaGQuY10KICAgICBzZXRwcm9jdGl0bGUoKSBhZnRlciBwcmVhdXRoIGNoaWxkOyBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI0IDE2OjAwOjI3CiAgICAgW3NlcnZlcmxvb3AuY10KICAgICByZW1vdmUgdW51c2VkIGRlYnVnCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI0IDE2OjAxOjEzCiAgICAgW3BhY2tldC5jXQogICAgIGRlYnVnLT5kZWJ1ZzMgZm9yIGV4dHJhIHBhZGRpbmcKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI0IDE3OjI3OjAzCiAgICAgW2tleGdleC5jXQogICAgIHR5cG87IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI0IDE3OjUzOjE2CiAgICAgW21vbml0b3JfZmRwYXNzLmNdCiAgICAgbWlub3IgY2xlYW51cCBhbmQgbW9yZSBlcnJvciBjaGVja2luZzsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNCAxODowNToyOQogICAgIFtzY2FyZC5jXQogICAgIHdlIG5lZWQgdG8gZmlndXJlIG91dCBBVVQwIGZvciBzY19wcml2YXRlX2VuY3J5cHQsIHRvbwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjQgMjM6MjA6MDAKICAgICBbbW9uaXRvci5jXQogICAgIHJlbW92ZSAiXG4iIGZyb20gZmF0YWwoKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNSAwOToyMToxMwogICAgIFthdXRoLXJzYS5jXQogICAgIHJldHVybiAwIChub3QgTlVMTCk7IHRvbWhAcG8uY3JsLmdvLmpwCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI1IDA5OjI1OjA2CiAgICAgW2F1dGgtcmgtcnNhLmNdCiAgICAgcm0gYm9ndXMgY29tbWVudAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNSAxNzozNDoyNwogICAgIFtzY2FyZC5jIHNjYXJkLmggc3NoLWFnZW50LmMgc3NoLWtleWdlbi5jIHNzaC5jXQogICAgIGNoYW5nZSBzY19nZXRfa2V5IHRvIHNjX2dldF9rZXlzIGFuZCBoaWRlIHNtYXJ0Y2FyZCBkZXRhaWxzIGluIHNjYXJkLmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI1IDIwOjEyOjEwCiAgICAgW21vbml0b3JfbW0uYyBtb25pdG9yX3dyYXAuY10KICAgICBzc2l6ZV90IGFyZ3MgdXNlICIlbGQiIGFuZCBjYXN0IHRvIChsb25nKQogICAgIHNpemVfdCBhcmdzIHVzZSAiJWx1IiBhbmQgY2FzdCB0byAodV9sb25nKQogICAgIG9rIG1hcmt1c0AgYW5kIHRoYW5rcyBtaWxsZXJ0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNSAyMTowNDowMgogICAgIFtzc2guY10KICAgICBzaW1wbGlmeSBudW1faWRlbnRpdHlfZmlsZXMgaGFuZGxpbmcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjUgMjE6MTM6NTEKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNvbXBhdC5jIGNvbXBhdC5oIG5jaGFuLmNdCiAgICAgZG9uJ3Qgc2VuZCBzdGRlcnIgZGF0YSBhZnRlciBFT0YsIGFjY2VwdCB0aGlzIGZyb20gb2xkZXIga25vd24gKGJyb2tlbikKICAgICBzc2hkIHNlcnZlcnMgb25seSwgZml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDAzOjI0OjAxCiAgICAgW21vbml0b3IuaCBtb25pdG9yX2ZkcGFzcy5oIG1vbml0b3JfbW0uaCBtb25pdG9yX3dyYXAuaF0KICAgICAkT3BlbkJTRCQKCjIwMDIwMzI0CiAtIChzdGV2ZXNrKSBbc2Vzc2lvbi5jXSBkaXNhYmxlIExPR0lOX05FRURTX1RFUk0gdW50aWwgd2UgYXJlIHN1cmUKICAgaXQgY2FuIGJlIHJlbW92ZWQuIG9ubHkgdXNlZCBvbiBzb2xhcmlzLiB3aWxsIG5vIGxvbmdlciBjb21waWxlIHdpdGgKICAgcHJpdnNlcCBzaHVmZmxpbmcuCgoyMDAyMDMyMgogLSAoc3RldmVzaykgSEFWRV9BQ0NSSUdIVFNfSU5fTVNHSERSIGNvbmZpZ3VyZSBzdXBwb3J0CiAtIChzdGV2ZXNrKSBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jXSAjaWZkZWYgSEFWRV9QV19DTEFTU19JTl9QQVNTV0QKIC0gKHN0ZXZlc2spIGNvbmZpZ3VyZSBhbmQgY3BwIF9fRlVOQ1RJT05fXyBneW1uYXN0aWNzIHRvIGhhbmRsZSBuaWVsc2lzbXMKIC0gKHN0ZXZlc2spIFttb25pdG9yX2ZkcGFzcy5jXSBzdXBwb3J0IGZvciBhY2Nlc3MgcmlnaHRzIHN0eWxlIGZpbGUKICAgZGVzY3JpcHRvciBwYXNzaW5nCiAtIChzdGV2ZXNrKSBbYXV0aDIuY10gbWVyZ2UgY2xlYW51cC9zeW5jCiAtIChzdGV2ZXNrKSBbZGVmaW5lcy5oXSBocC11eCAxMSBoYXMgYW5jaWxsYXJ5IGRhdGEgc3R5bGUgZmQgcGFzc2luZywgYnV0CiAgIGlzIG1pc3NpbmcgQ01TR19MRU4oKSBhbmQgQ01TR19TUEFDRSgpIG1hY3Jvcy4KIC0gKHN0ZXZlc2spIFtkZWZpbmVzLmhdICNkZWZpbmUgTUFQX0FOT04gTUFQX0FOT05ZTU9VUyBmb3IgSFAtVVg7IG90aGVyCiAgIHBsYXRmb3JtcyBtYXkgbmVlZCB0aGlzLS1JJ20gbm90IHN1cmUuICBtbWFwKCkgaXNzdWVzIHdpbGwgbmVlZCB0byBiZQogICBhZGRyZXNzZWQgZnVydGhlci4KIC0gKHRpbSkgW2NpcGhlci5jXSBmaXggcHJvYmxlbSB3aXRoIE9wZW5CU0Qgc3luYwogLSAoc3RldmVzaykgW0xJQ0VOQ0VdIE9wZW5CU0Qgc3luYwoKMjAwMjAzMjEKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8wOCAwNjoxMDoxNgogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIHByaW50ZiB0eXBlIG1pc21hdGNoCiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzExIDAzOjE4OjQ5CiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgY29ycmVjdCB0eXBlIG1pc21hdGNoZXMgKHVfaW50NjRfdCAhPSB1bnNpZ25lZCBsb25nIGxvbmcpCiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzExIDAzOjE5OjUzCiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgaW5kZW50CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE0IDE1OjI0OjI3CiAgICAgW3NzaGNvbm5lY3QxLmNdCiAgICAgZG9uJ3QgdHJ1c3Qgc2l6ZSBzZW50IGJ5IChyb2d1ZSkgc2VydmVyOyBub3RlZCBieSBzLmVzc2VyQGUtbWF0dGVycy5kZQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNCAxNjozODoyNgogICAgIFtzc2hkLmNdCiAgICAgc3BsaXQgb3V0IHNzaDEgc2Vzc2lvbiBrZXkgZGVjcnlwdGlvbjsgb2sgcHJvdm9zQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNCAxNjo1NjozMwogICAgIFthdXRoLXJoLXJzYS5jIGF1dGgtcnNhLmMgYXV0aC5oXQogICAgIHNwbGl0IGF1dGhfcnNhKCkgZm9yIGJldHRlciByZWFkYWJpbGl0eSBhbmQgcHJpdnNlcDsgb2sgcHJvdm9zQAogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNSAxMTowMDozOAogICAgIFthdXRoLmNdCiAgICAgZml4IGZpbGUgdHlwZSBjaGVja2luZyAodXNlIFNfSVNSRUcpLiAgb2sgYnkgbWFya3VzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE2IDExOjI0OjUzCiAgICAgW2NvbXByZXNzLmNdCiAgICAgc2tpcCBpbmZsYXRlRW5kIGlmIGluZmxhdGUgZmFpbHM7IG9rIHByb3Zvc0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTYgMTc6MjI6MDkKICAgICBbYXV0aC1yaC1yc2EuYyBhdXRoLmhdCiAgICAgc3BsaXQgYXV0aF9yaG9zdHNfcnNhKCksIG9rIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE2IDE3OjQxOjI1CiAgICAgW2F1dGgta3JiNS5jXQogICAgIEJTRCBsaWNlbnNlLiAgZnJvbSBEYW5pZWwgS291cmlsIHZpYSBEdWcgU29uZy4gIG9rIG1hcmt1c0AKICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTcgMjA6MjU6NTYKICAgICBbYXV0aC5jIGF1dGguaCBhdXRoMS5jIGF1dGgyLmNdCiAgICAgZ2V0cHduYW1hbGxvdyByZXR1cm5zIHN0cnVjdCBwYXNzd2QgKiBvbmx5IGlmIHVzZXIgdmFsaWQ7IG9rYXkgbWFya3VzQAogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAwMToxMjoxNAogICAgIFthdXRoLmggYXV0aDEuYyBhdXRoMi5jIHNzaGQuY10KICAgICBoYXZlIHRoZSBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBhdXRoZW50aWNhdGlvbiBjb250ZXh0CiAgICAgYW5kIHRoZW4gZG9fYXV0aGVudGljYXRlZDsgb2theSBtaWxsZXJ0QAogICAtIGR1Z3NvbmdAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMDE6MzA6MTAKICAgICBbYXV0aC1rcmI0LmNdCiAgICAgc2V0IGNsaWVudCB0byBOVUxMIGFmdGVyIHhmcmVlKCksIGZyb20gUm9sZiBCcmF1biAKICAgICA8cmJyYXVuK3NzaEBhbmRyZXcuY211LmVkdT4KICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMDM6NDE6MDgKICAgICBbYXV0aC5jIHNlc3Npb24uY10KICAgICBtb3ZlIGF1dGhfYXBwcm92YWwgaW50byBnZXRwd25hbWFsbG93IHdpdGggaGVscCBmcm9tIG1pbGxlcnRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjEzOjE1CiAgICAgW2NpcGhlci5jIGNpcGhlci5oXQogICAgIGV4cG9ydC9pbXBvcnQgY2lwaGVyIHN0YXRlczsgbmVlZGVkIGJ5IHNzaC1wcml2c2VwCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjE2OjM4CiAgICAgW3BhY2tldC5jIHBhY2tldC5oXQogICAgIGV4cG9ydC9pbXBvcnQgY2lwaGVyIHN0YXRlLCBpdiBhbmQgc3NoMiBzZXFucjsgbmVlZGVkIGJ5IHNzaC1wcml2c2VwCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjIzOjMxCiAgICAgW2tleS5jIGtleS5oXQogICAgIGFkZCBrZXlfZGVtb3RlKCkgZm9yIHNzaC1wcml2c2VwCiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjI1OjI5CiAgICAgW2J1ZmF1eC5jIGJ1ZmF1eC5oXQogICAgIGJ1ZmZlcl9za2lwX3N0cmluZyBhbmQgZXh0cmEgc2FuaXR5IGNoZWNraW5nOyBuZWVkZWQgYnkgc3NoLXByaXZzZXAKICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMTc6MzE6NTQKICAgICBbY29tcHJlc3MuY10KICAgICBleHBvcnQgY29tcHJlc3Npb24gc3RyZWFtcyBmb3Igc3NoLXByaXZzZXAKICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMTc6NTA6MzEKICAgICBbYXV0aC1ic2RhdXRoLmMgYXV0aC1vcHRpb25zLmMgYXV0aC1yaC1yc2EuYyBhdXRoLXJzYS5jIGF1dGgtc2tleS5jIGF1dGguaAogICAgICBhdXRoMS5jIGF1dGgyLWNoYWxsLmMgYXV0aDIuYyBrZXguYyBrZXguaCBrZXhkaC5jIGtleGdleC5jIHNlcnZjb25mLmMKICAgICAgc2Vzc2lvbi5oIHNlcnZjb25mLmggc2VydmVybG9vcC5jIHNlc3Npb24uYyBzc2hkLmNdCiAgICAgaW50ZWdyYXRlIHByaXZpbGVnZSBzZXBhcmF0ZWQgb3BlbnNzaDsgaXRzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdCBmb3Igbm93LgogICAgIHdvcmsgZG9uZSBieSBtZSBhbmQgbWFya3VzQAogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzo1MzowOAogICAgIFtzc2hkLjhdCiAgICAgY3JlZGl0cyBmb3IgcHJpdnNlcAogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzo1OTowOQogICAgIFtzc2hkLjhdCiAgICAgZG9jdW1lbnQgVXNlUHJpdmlsZWdlU2VwYXJhdGlvbgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMjM6NTI6NTEKICAgICBbc2VydmNvbmYuY10KICAgICBVbnByaXZVc2VyL1VucHJpdkdyb3VwIHVzYWJsZSBub3ctLXNwZWNpZnkgbnVtZXJpYyB1c2VyL2dyb3VwOyBvawogICAgIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDAzOjAzOjQzCiAgICAgW3BhdGhuYW1lcy5oIHNlcnZjb25mLmMgc2VydmNvbmYuaCBzc2hkLmNdCiAgICAgX1BBVEhfUFJJVlNFUF9DSFJPT1RfRElSOyBvayBwcm92b3NACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOSAwNToyMzowOAogICAgIFtzc2hkLjhdCiAgICAgQmFubmVyIGhhcyBubyBkZWZhdWx0LgogICAtIG1wZWNoQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDA2OjMyOjU2CiAgICAgW3NmdHAtaW50LmNdCiAgICAgdXNlIHhmcmVlKCkgYWZ0ZXIgeHN0cmR1cCgpLgoKICAgICBtYXJrdXNAIG9rCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDEwOjM1OjM5CiAgICAgW2F1dGgtb3B0aW9ucy5jIGF1dGguaCBzZXNzaW9uLmMgc2Vzc2lvbi5oIHNzaGQuY10KICAgICBjbGVhbiB1cCBwcm90b3R5cGVzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDEwOjQ5OjM1CiAgICAgW2F1dGgta3JiNS5jIGF1dGgtcmgtcnNhLmMgYXV0aC5jIGNpcGhlci5jIGtleS5jIG1pc2MuaCBwYWNrZXQuYyBzZXNzaW9uLmMKICAgICAgc2Z0cC1jbGllbnQuYyBzZnRwLWdsb2IuaCBzZnRwLmMgc3NoLWFkZC5jIHNzaC5jIHNzaGNvbm5lY3QyLmMgc3NoZC5jCiAgICAgIHR0eW1vZGVzLmNdCiAgICAgS05GIHdoaXRlc3BhY2UKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMTQ6Mjc6MzkKICAgICBbYXV0aC5jIGF1dGgxLmMgYXV0aDIuY10KICAgICBtYWtlIGdldHB3bmFtYWxsb3coKSBhbGx3YXlzIGNhbGwgcHdjb3B5KCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMTU6MzE6NDcKICAgICBbYXV0aC5jXQogICAgIGNoZWNrIGZvciBOVUxMOyBmcm9tIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIwIDE5OjEyOjI1CiAgICAgW3NlcnZjb25mLmMgc2VydmNvbmYuaCBzc2guaCBzc2hkLmNdCiAgICAgZm9yIHVucHJpdmlsZWdlZCB1c2VyLCBncm91cCBkbzoKICAgICBwdz1nZXRwd25hbShTU0hfUFJJVlNFUF9VU0VSKTsgZG9fc2V0dXNlcmNvbnRleHQocHcpLiAgb2sgcHJvdm9zQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjAgMjE6MDg6MDgKICAgICBbc3NoZC5jXQogICAgIHN0cmVycm9yKCkgb24gY2hkaXIoKSBmYWlsOyBvayBwcm92b3NACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDEwOjIxOjIwCiAgICAgW3NzaC1hZGQuY10KICAgICBpZ25vcmUgZXJyb3JzIGZvciBub25leGlzdGluZyBkZWZhdWx0IGtleXMgaW4gc3NoLWFkZCwKICAgICBmaXhlcyBodHRwOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OAogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDE1OjE3OjI2CiAgICAgW2NsaWVudGxvb3AuYyBzc2guMV0KICAgICBhZGQgYnVpbHQtaW4gY29tbWFuZCBsaW5lIGZvciBhZGRpbmcgbmV3IHBvcnQgZm9yd2FyZGluZ3Mgb24gdGhlIGZseS4KICAgICBiYXNlZCBvbiBhIHBhdGNoIGZyb20gYnJpYW4gd2VsbGluZ3Rvbi4gb2sgbWFya3VzQC4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMTY6Mzg6MDYKICAgICBbc2NhcmQuY10KICAgICBtYWtlIGNvbXBpbGUgdy8gb3BlbnNzbCAwLjkuNwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxNjo1NDo1MwogICAgIFtzY2FyZC5jIHNjYXJkLmggc3NoLWtleWdlbi5jXQogICAgIG1vdmUga2V5IHVwbG9hZCB0byBzY2FyZC5bY2hdCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDE2OjU3OjE1CiAgICAgW3NjYXJkLmNdCiAgICAgcmVtb3ZlIGNvbnN0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDE2OjU4OjEzCiAgICAgW2NsaWVudGxvb3AuY10KICAgICByZW1vdmUgdW51c2VkCiAgIC0gcmVlc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxODowODoxNQogICAgIFtzY2FyZC5jXQogICAgIEluIHNjX3B1dF9rZXkoKSwgc2NfcmVhZGVyX2lkIHNob3VsZCBiZSBpZC4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMjA6NTE6MTIKICAgICBbc3NoZF9jb25maWddCiAgICAgYWRkIHByaXZzZXAgKG9mZikKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMjE6MjM6MzQKICAgICBbc3NoZC5jXQogICAgIGFkZCBwcml2c2VwX3ByZWF1dGgoKSBhbmQgcmVtb3ZlIDEgZ290bzsgb2sgcHJvdm9zQAogICAtIHJlZXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMjE6NTQ6MzQKICAgICBbc2NhcmQuYyBzY2FyZC5oIHNzaC1rZXlnZW4uY10KICAgICBBZGQgUElOLXByb3RlY3Rpb24gZm9yIHNlY3JldCBrZXkuCiAgIC0gcmVlc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAyMjo0NDowNQogICAgIFthdXRoZmQuYyBhdXRoZmQuaCBzc2gtYWRkLmMgc3NoLWFnZW50LmMgc3NoLmNdCiAgICAgQWRkIFBJTi1wcm90ZWN0aW9uIGZvciBzZWNyZXQga2V5LgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAyMzowNzozNwogICAgIFtjbGllbnRsb29wLmNdCiAgICAgcmVtb3ZlIHVudXNlZCwgc3luYyB3LyBjbWRsaW5lIHBhdGNoIGluIG15IHRyZWUuCgoyMDAyMDMxNwogLSAodGltKSBbY29uZmlndXJlLmFjXSBBc3N1bWUgcGF0aCBnaXZlbiB3aXRoIC0td2l0aC1waWQtZGlyPVBBVEggaXMgd2FudGVkLAogICB3YXJuIGlmIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gUHV0IHN5c3RlbSBkaXJlY3RvcmllcyBpbiBmcm9udCBvZgogICBQQVRIIGZvciBmaW5kaW5nIGVudG9ycHkgY29tbWFuZHMuCiAtICh0aW0pIFtjb250cmliL2FpeC9idWlsZGJmZi5zaCBjb250cmliL2FpeC9pbnZlbnRvcnkuc2hdIEFJWCBwYWNrYWdlCiAgIGJ1aWxkIGZpeGVzLiAgUGF0Y2ggYnkgRGFycmVuIFR1Y2tlciA8ZHR1Y2tlckB6aXAuY29tLmF1PgogICBbY29udHJpYi9zb2xhcmlzL2J1aWxkcGtnLnNoXSBhZGQgbWlzc2luZyBkaXJzIHRvIFNZU1RFTV9ESVIuIEhhdmUKICAgcG9zdGluc3RhbGwgY2hlY2sgZm9yICRwaWRkaXIgYW5kIGFkZCBpZiBuZWNlc3NhcnkuCgoyMDAyMDMxMQogLSAodGltKSBbY29udHJpYi9zb2xhcmlzL2J1aWxkcGtnLnNoLCBjb250cmliL3NvbGFyaXMvUkVBRE1FXSBVcGRhdGVkIHRvCiAgIGJ1aWxkIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IFNWUjQgc3R5bGUgcGFja2FnZSB0b29scy4gTm93IHJ1bnMKICAgZnJvbSBidWlsZCBkaXIuIFBhcnRzIGFyZSBiYXNlZCBvbiBwYXRjaGVzIGZyb20gQW50b25pbyBOYXZhcnJvLCBhbmQKICAgRGFycmVuIFR1Y2tlci4KCjIwMDIwMzA4CiAtIChkam0pIFJldmVydCBiaXRzIG9mIE1hcmt1cycgT3BlblNTTCBjb21wYXQgcGF0Y2ggd2hpY2ggd2FzIAogICBhY2NpZGVudGFsbHkgY29tbWl0dGVkLgogLSAoZGptKSBBZGQgTWFya3VzJyBwYXRjaCBmb3IgY29tcGF0IHdpaCBPcGVuU1NMIDwgMC45LjYuIAogICBLbm93biBpc3N1ZTogQmxvd2Zpc2ggZm9yIFNTSDEgZG9lcyBub3Qgd29yawogLSAoc3RldmVzaykgZW50cm9weS5jOiB0eXBvIGluIGRlYnVnIG1lc3NhZ2UKIC0gKGRqbSkgc3NoLWtleWdlbiAtaSBuZWVkcyBzZWVkZWQgUk5HOyByZXBvcnQgZnJvbSBtYXJrdXNACgokSWQ6IENoYW5nZUxvZyx2IDEuMjExMiAyMDAyLzA1LzEzIDAzOjU3OjA0IHN0ZXZlc2sgRXhwICQK