MjAwNS0wNy0xNCAgSGVpa28gQ2Fyc3RlbnMgIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgoKCSogbGludXgvczM5MC9zeXNjYWxsZW50LmggKHN5c190Z2tpbGwsIHZzZXJ2ZXIsIGZhZHZpc2U2NF82NCkKCShzdGF0ZnM2NCwgZnN0YXRmczY0LCByZW1hcF9maWxlX3BhZ2VzLCBtYmluZCwgZ2V0X21lbXBvbGljeSkKCShzZXRfbWVtcG9saWN5LCBtcV9vcGVuLCBtcV91bmxpbmssIG1xX3RpbWVkc2VuZCwgbXFfdGltZWRyZWNlaXZlKQoJKG1xX25vdGlmeSwgbXFfZ2V0c2V0YXR0ciwgc3lzX2tleGVjX2xvYWQsIGFkZF9rZXksIHJlcXVlc3Rfa2V5KQoJKGtleWN0bCwgd2FpdGlkKTogQWRkZWQuCgkqIGxpbnV4L3MzOTB4L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UgYW5kIGFkZGVkIG1pc3NpbmcgX2xsc2Vlay4KCSogbGludXgvczM5MC9lcnJub2VudC5oIChFQ0FOQ0VMRUQsIEVOT0tFWSwgRUtFWUVYUElSRUQpCgkoRUtFWVJFVk9LRUQsIEVLRVlSRUpFQ1RFRCwgRU9XTkVSREVBRCwgRU5PVFJFQ09WRVJBQkxFKTogQWRkZWQuCgkqIGxpbnV4L3MzOTB4L2Vycm5vZW50Lmg6IExpa2V3aXNlLgoKMjAwNS0wNy0wNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIG1lbS5jIFtMSU5VWF0gKHN5c19vbGRfbW1hcCkgW1g4Nl82NF06IEV4dHJhY3QgMzItYml0IHZhbHVlcyBpZgoJY2hpbGQgaXMgMzItYml0LgoJRml4ZXMgUkgjMTYyNDY3LgoKMjAwNS0wNi0wOCAgRG1pdHJ5IFYuIExldmluICA8bGR2QGFsdGxpbnV4Lm9yZz4KCglJbnRyb2R1Y2UgIi1lIHRyYWNlPWRlc2MiLgoJKiBkZWZzLmggKFRSQUNFX0RFU0MpOiBOZXcgZmxhZy4KCSogc3lzY2FsbC5jOiBEZWZpbmUgVEQgbWFjcm8gYmVmb3JlIGluY2x1ZGUgb2Ygc3lzY2FsbGVudCBmaWxlcwoJYW5kIHVuZGVmaW5lIGl0IGFmdGVyd2FyZHMuCgkobG9va3VwX2NsYXNzKTogUmVjb2duaXplICJkZXNjIiBrZXl3b3JkLgoJKiBzdHJhY2UuMTogRG9jdW1lbnQgIi1lIHRyYWNlPWRlc2MiLgoJKiBmcmVlYnNkL2kzODYvc3lzY2FsbGVudC5oOiBNYXJrIHRob3NlIHN5c2NhbGxzIHdoaWNoIHRha2UgYQoJZmlsZSBkZXNjcmlwdG9yIGFzIGFuIGFyZ3VtZW50IG9yIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvciB3aXRoCglURCBmbGFnLgoJKiBsaW51eC9hbHBoYS9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9ocHBhL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvbWlwcy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3MzOTAvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvczM5MHgvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvc2gvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvc2g2NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zcGFyYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zcGFyYzY0L3N5c2NhbGxlbnQyLmg6IExpa2V3aXNlLgoJKiBsaW51eC9zcGFyYzY0L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBzdW5vczQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogc3ZyNC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJRml4ZXMgUkgjMTU5NDAwLgoKCVJlbW92ZSBURiBmbGFnIGZyb20gdGhvc2Ugc3lzY2FsbHMgd2hpY2ggaGF2ZSBubyBmaWxlbmFtZSBhcmd1bWVudC4KCSogZnJlZWJzZC9pMzg2L3N5c2NhbGxlbnQuaDogUmVtb3ZlIFRGIGZsYWcgZnJvbSBmc3RhdCwgcHJlYWQsCglwd3JpdGUsIGZzdGF0LCBzZW5kZmlsZS4KCSogbGludXgvYWxwaGEvc3lzY2FsbGVudC5oOiBSZW1vdmUgVEYgZmxhZyBmcm9tIHJlYWQsIHdyaXRlLAoJcHJlYWQsIHB3cml0ZSwgc2VuZGZpbGUuCgkqIGxpbnV4L2hwcGEvc3lzY2FsbGVudC5oOiBSZW1vdmUgVEYgZmxhZyBmcm9tIHJlYWQsIHdyaXRlLAoJcHJlYWQsIHB3cml0ZSwgZnN0YXQ2NCwgc2VuZGZpbGUsIGZ0cnVuY2F0ZTY0LgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogUmVtb3ZlIFRGIGZsYWcgZnJvbSByZWFkLCB3cml0ZSwKCXNlbmRmaWxlLCBmc3RhdCwgZmFkdmlzZTY0LgoJKiBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogUmVtb3ZlIFRGIGZsYWcgZnJvbSByZWFkLCB3cml0ZSwKCWZzdGF0ZnMsIGZzdGF0LCBwcmVhZCwgcHdyaXRlLCBzZW5kZmlsZSwgZnRydW5jYXRlNjQsIGZzdGF0NjQsCglzZW5kZmlsZTY0LCBmYWR2aXNlNjQsIGZzdGF0ZnM2NC4KCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IFJlbW92ZSBURiBmbGFnIGZyb20gcmVhZCwgd3JpdGUsCglmc3RhdCwgcHJlYWQsIHB3cml0ZSwgc2VuZGZpbGUsIGZ0cnVuY2F0ZTY0LCBmc3RhdDY0LCBzZW5kZmlsZTY0LAoJZmFkdmlzZTY0LCBmc3RhdGZzNjQsIGZhZHZpc2U2NF82NC4KCSogbGludXgvczM5MC9zeXNjYWxsZW50Lmg6IFJlbW92ZSBURiBmbGFnIGZyb20gcHJlYWQsIHB3cml0ZSwKCXNlbmRmaWxlLCBmdHJ1bmNhdGU2NCwgZnN0YXQ2NCwgc2VuZGZpbGU2NC4KCSogbGludXgvczM5MHgvc3lzY2FsbGVudC5oOiBSZW1vdmUgVEYgZmxhZyBmcm9tIHByZWFkLCBwd3JpdGUsCglzZW5kZmlsZSwgc2VuZGZpbGU2NC4KCSogbGludXgvc2gvc3lzY2FsbGVudC5oOiBSZW1vdmUgVEYgZmxhZyBmcm9tIHByZWFkLCBwd3JpdGUsCglzZW5kZmlsZSwgZnN0YXQ2NC4KCSogbGludXgvc2g2NC9zeXNjYWxsZW50Lmg6IFJlbW92ZSBURiBmbGFnIGZyb20gcHJlYWQsIHB3cml0ZSwKCXNlbmRmaWxlLCBmdHJ1bmNhdGU2NCwgZnN0YXQ2NC4KCSogbGludXgvc3BhcmMvc3lzY2FsbGVudC5oOiBSZW1vdmUgVEYgZmxhZyBmcm9tIHNlbmRmaWxlLCBmc3RhdDY0LAoJcHJlYWQsIHB3cml0ZSwgc2VuZGZpbGU2NC4KCSogbGludXgvc3BhcmM2NC9zeXNjYWxsZW50Mi5oOiBMaWtld2lzZS4KCSogbGludXgvc3BhcmM2NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFJlbW92ZSBURiBmbGFnIGZyb20gcHJlYWQsIHB3cml0ZSwgc2VuZGZpbGUsCglmdHJ1bmNhdGU2NCwgZnN0YXQ2NCwgc2VuZGZpbGU2NCwgZmFkdmlzZTY0LCBmYWR2aXNlNjQsIGZzdGF0ZnM2NCwKCWZhZHZpc2U2NF82NC4KCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogUmVtb3ZlIFRGIGZsYWcgZnJvbSBwcmVhZCwgcHdyaXRlLAoJc2VuZGZpbGUsIGZhZHZpc2U2NF82NC4KCSogc3ZyNC9zeXNjYWxsZW50Lmg6IFJlbW92ZSBURiBmbGFnIGZyb20gcHJlYWQsIHB3cml0ZSwgZnRydW5jYXRlLAoJZnN0YXR2ZnM2NCwgZnRydW5jYXRlNjQuCglGaXhlcyBSSCMxNTkzNDAuCgoyMDA1LTA3LTA0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbmV0LmMgKHNvY2tpcHY2b3B0aW9ucyk6IEFkZCBJUFY2X0FERF9NRU1CRVJTSElQLAoJSVBWNl9EUk9QX01FTUJFUlNISVAsIElQVjZfUk9VVEVSX0FMRVJULgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCUZpeGVzIFJIIzE2MjQ1MC4KCgkqIG5ldC5jIChzb2NraXBvcHRpb25zKTogRml4IHR5cG9zLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCUZpeGVzIFJIIzE2MTU3OC4KCgkqIHV0aWwuYyAocHJpbnRudW1faW50KTogTmV3IGZ1bmN0aW9uLCBwcmludG51bSB3aXRoIHMvbG9uZy9pbnQvLgoJKiBkZWZzLmg6IERlY2xhcmUgaXQuCgkqIG5ldC5jIChwcmludHNvY2tvcHQpOiBVc2UgaXQgZm9yIGludC1zaXplZCBvcHRpb24uCglGaXhlcyBSSCMxNjI0NDkuCglSZXBvcnRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCjIwMDUtMDYtMDkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC41LjEyLgoJKiBkZWJpYW4vY2hhbmdlbG9nLCBzdHJhY2Uuc3BlYzogNC41LjEyLTEuCgoyMDA1LTA2LTA4ICBEbWl0cnkgVi4gTGV2aW4gIDxsZHZAYWx0bGludXgub3JnPgoKCU1pbm9yIG5hbWVzcGFjZSBjbGVhbnVwLgoJKiBkZWZzLmggKHN0cmluZ19xdW90ZSk6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCSogZmlsZS5jIChvcGVubW9kZXNzb2wpIFtMSU5VWFNQQVJDXTogTWFrZSBzdGF0aWMuCgkoZmlsZWZsYWdzKTogTGlrZXdpc2UuCgkoYWNsY21kcywgYWNsaXBjKSBbSEFWRV9TWVNfQUNMX0hdOiBMaWtld2lzZS4KCShkaXJlbnR0eXBlcykgW0ZSRUVCU0QgfHwgTElOVVhdOiBMaWtld2lzZS4KCSh4YXR0cmZsYWdzKTogTGlrZXdpc2UuCgkqIHByb2Nlc3MuYyAodW5hbGlnbmN0bF9zdHJpbmcpOiBNYWtlIHN0YXRpYy4KCShzZXRhcmcpOiBEaXNhYmxlLgoJKiBzeXNjYWxsLmMgKHN1YmNhbGxzX3RhYmxlKTogTWFrZSBzdGF0aWMuCgkoc29ja2V0X21hcCkgWyEoTElOVVggJiYgKEFMUEhBIHx8IE1JUFMpKV06IExpa2V3aXNlLgoJKHNwYXJjX3NvY2tldF9kZWNvZGUpOiBNYWtlIHN0YXRpYywgZGVmaW5lIGZvciBbU1BBUkMgfHwgU1BBUkM2NF0gb25seS4KCShkZWNvZGVfc3ViY2FsbCk6IE1ha2Ugc3RhdGljLgoJKHN5c2NhbGxfZml4dXApOiBMaWtld2lzZS4KCShnZXRfZXJyb3IpOiBMaWtld2lzZS4KCShzeXNjYWxsX2VudGVyKTogTGlrZXdpc2UuCgkqIHV0aWwuYyAodHZfdHYpOiBEaXNhYmxlLgoJKGdldHBjKTogTGlrZXdpc2UuCgkoc3RyaW5nX3F1b3RlKTogTWFrZSBzdGF0aWMuCglGaXhlcyBSSCMxNTk2ODguCgoyMDA1LTA1LTEyICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIHV0aWwuYyAoZ2V0cGMsIHByaW50Y2FsbCk6IENoZWNrICNpZiBkZWZpbmVkKE02OEspLCBub3QgTTY4ay4KCUVuYWJsZXMgYC1pJyBvbiBtNjhrIG1hY2hpbmVzLgoKMjAwNS0wNi0wNiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHByb2Nlc3MuYyAoc3RydWN0X3VzZXJfb2Zmc2V0cykgW1g4Nl82NF06IFJlb3JkZXIgZWxlbWVudHMgc28KCW1hdGNoaW5nIHdvcmtzIHJpZ2h0LgoJRml4ZXMgUkgjMTU5Nzg3LgoKCSogbGludXgvc3lzY2FsbC5oIChTWVNfc29ja2V0LCBTWVNfYmluZCwgU1lTX2Nvbm5lY3QsIFNZU19saXN0ZW4pCgkoU1lTX2FjY2VwdCwgU1lTX2dldHNvY2tuYW1lLCBTWVNfZ2V0cGVlcm5hbWUsIFNZU19zb2NrZXRwYWlyKQoJKFNZU19zZW5kLCBTWVNfcmVjdiwgU1lTX3NlbmR0bywgU1lTX3JlY3Zmcm9tLCBTWVNfc2h1dGRvd24pCgkoU1lTX3NldHNvY2tvcHQsIFNZU19nZXRzb2Nrb3B0LCBTWVNfc2VuZG1zZywgU1lTX3JlY3Ztc2cpCgkoU1lTX2dldHNvY2tuYW1lLCBTWVNfc2Vtb3AsIFNZU19zZW1nc3ViX2V0LCBTWVNfc2VtZ2V0LCBTWVNfc2VtY3RsKQoJKFNZU19zZW10aW1lZG9wLCBTWVNfbXNnc25kLCBTWVNfbXNncmN2LCBTWVNfbXNnZ2V0KQoJKFNZU19tc2djdGwsIFNZU19zaG1hdCwgU1lTX3NobWR0LCBTWVNfc2htZ2V0KQoJKFNZU19zaG1jdGwpOiBNYWNyb3MgcmVuYW1lZCB0byBTWVNfc3ViXyouCgkqIHN5c2NhbGwuYyAoZHVtcGlvKTogTWF0Y2ggU1lTX3N1Yl8qIGlmIGRlZmluZWQgaW5zdGVhZCBvZiBTWVNfKi4KCgkqIGxpbnV4L3N5c2NhbGwuaCAoU1lTX3dhaXRpZCk6IERlZmluZSBpZiBub3QgZGVmaW5lZC4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogRml4IHByZWFkL3B3cml0ZSBuYW1lcyB0byBwcmVhZDY0L3B3cml0ZTY0LgoKCSogZGVmcy5oIChzdHJ1Y3Qgc3lzZW50KTogTmV3IG1lbWJlciBgbmF0aXZlX3Njbm8nLgoJKGtub3duX3Njbm8pOiBEZWNsYXJlIG5ldyBmdW5jdGlvbi4KCSogbGludXgvc3lzY2FsbGVudC5oOiBBZGQgbmV3IGZpbmFsIGZpZWxkIHRvIGludGVyZXN0aW5nIHN5c2NhbGxzLgoJKiBzeXNjYWxsLmMgKGtub3duX3Njbm8pOiBOZXcgZnVuY3Rpb24uCgkoZHVtcGlvLCBpbnRlcm5hbF9zeXNjYWxsLCBzeXNjYWxsX2ZpeHVwLCB0cmFjZV9zeXNjYWxsKTogVXNlIGl0LgoJKiBwcm9jZXNzLmMgKGludGVybmFsX2ZvcmssIGludGVybmFsX2V4aXQpOiBMaWtld2lzZS4KCVtJQTY0XSAoQVJHX1NUQUNLU0laRSwgQVJHX1BUSUQsIEFSR19DVElELCBBUkdfVExTKTogTGlrZXdpc2UuCgkqIHN0cmFjZS5jIChwcm9jX29wZW4pOiBMaWtld2lzZS4KCSogdXRpbC5jIFtMSU5VWF0gKHNldGJwdCk6IExpa2V3aXNlLgoJKiBsaW51eC9zeXNjYWxsLmg6IFJlbW92ZSBbIWRlZmluZWQoWDg2XzY0KV0gZnJvbSBjb25kaXRpb25hbAoJZm9yIGRlZmluaW5nIFNZU19zb2NrZXRfc3ViY2FsbCBldCBhbC4KCSogbGludXgvc3lzY2FsbGVudC5oOiBMaWtld2lzZSBmb3IgI2Vycm9yIGNoZWNrLgoJKiBzeXNjYWxsLmMgKHRyYWNlX3N5c2NhbGwpOiBMaWtld2lzZSBmb3IgU1lTX3tzb2NrZXRjYWxsLGlwY30gY2FzZXMuCglGaXhlcyBSSCMxNTg5MzQuCgoyMDA1LTA2LTAyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogZmlsZS5jIChwcmludHN0YXRmczY0KTogQ2FzdCB2YWx1ZXMgdG8gdW5zaWduZWQgbG9uZyBsb25nIGFuZCB1c2UKCSVsbHUgZm9ybWF0cy4KCUZpeGVzIFJIIzE1ODI0My4KCjIwMDUtMDUtMzEgIERtaXRyeSBWLiBMZXZpbiAgPGxkdkBhbHRsaW51eC5vcmc+CgoJRGVhbCB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4KCSogZGVmcy5oICh0cHJpbnRfaW92KTogVXBkYXRlIHByb3RvdHlwZS4KCSogZGVzYy5jIChzeXNfZXBvbGxfd2FpdCkgW0hBVkVfU1lTX0VQT0xMX0hdOiBEbyBub3QgYWxsb2NhdGUKCWVwb2xsX2V2ZW50IGFycmF5IG9mIGFyYml0cmFyeSBzaXplIG9uIHRoZSBzdGFjaywgdG8gYXZvaWQKCXN0YWNrIG92ZXJmbG93LgoJKiBmaWxlLmMgKHByaW50X3hhdHRyX3ZhbCk6IENoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZwoJbWFsbG9jIHNpemUgY2FsY3VsYXRpb24sIHRvIGF2b2lkIGhlYXAgY29ycnVwdGlvbi4KCSogaW8uYyAodHByaW50X2lvdikgW0hBVkVfU1lTX1VJT19IXTogQ2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3cKCWR1cmluZyBtYWxsb2Mgc2l6ZSBjYWxjdWxhdGlvbiwgdG8gYXZvaWQgaGVhcCBjb3JydXB0aW9uLgoJQ2hhbmdlIGlvdmVjIGFycmF5IGhhbmRsaW5nIHRvIGF2b2lkIGhlYXAgbWVtb3J5IGFsbG9jYXRpb24uCgkqIG1lbS5jIChnZXRfbm9kZXMpIFtMSU5VWF06IENoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZwoJc2l6ZSBjYWxjdWxhdGlvbiBhbmQgZG8gbm90IGFsbG9jYXRlIGFycmF5IG9mIGFyYml0cmFyeSBzaXplIG9uCgl0aGUgc3RhY2ssIHRvIGF2b2lkIHN0YWNrIG92ZXJmbG93LgoJKiBuZXQuYyAocHJpbnRjbXNnaGRyKSBbSEFWRV9TRU5ETVNHXTogRG8gbm90IGFsbG9jYXRlIGFycmF5IG9mCglhcmJpdHJhcnkgc2l6ZSBvbiB0aGUgc3RhY2ssIHRvIGF2b2lkIHN0YWNrIG92ZXJmbG93LiAgRG8gbm90Cgl0cnVzdCBjbXNnLmNtc2dfbGVuIHRvIGF2b2lkIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgYWxsb2NhdGVkCglvYmplY3QuCgkocHJpbnRtc2doZHIpIFtIQVZFX1NFTkRNU0ddOiBVcGRhdGUgdHByaW50X2lvdigpIHVzYWdlLgoJKiBwcm9jZXNzLmMgKHN5c19zZXRncm91cHMpOiBDaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcKCW1hbGxvYyBzaXplIGNhbGN1bGF0aW9uLCB0byBhdm9pZCBoZWFwIGNvcnJ1cHRpb24uICBDaGFuZ2UgZ2lkX3QKCWFycmF5IGhhbmRsaW5nIHRvIGF2b2lkIGhlYXAgbWVtb3J5IGFsbG9jYXRpb24uCgkoc3lzX2dldGdyb3Vwcyk6IExpa2V3aXNlLgoJKHN5c19zZXRncm91cHMzMikgW0xJTlVYXTogTGlrZXdpc2UuCgkoc3lzX2dldGdyb3VwczMyKSBbTElOVVhdOiBMaWtld2lzZS4KCSogc3RyZWFtLmMgKHN5c19wb2xsKSBbSEFWRV9TWVNfUE9MTF9IXTogQ2hlY2sgZm9yIGludGVnZXIKCW92ZXJmbG93IGR1cmluZyBtYWxsb2Mgc2l6ZSBjYWxjdWxhdGlvbiwgdG8gYXZvaWQgaGVhcCBjb3JydXB0aW9uLgoJQ2hhbmdlIHBvbGxmZCBhcnJheSBoYW5kbGluZyB0byBhdm9pZCBoZWFwIG1lbW9yeSBhbGxvY2F0aW9uLgoJKiBzeXN0ZW0uYyAoc3lzX3N5c2N0bCkgW0xJTlVYXTogQ2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3cKCWR1cmluZyBtYWxsb2Mgc2l6ZSBjYWxjdWxhdGlvbiwgdG8gYXZvaWQgaGVhcCBjb3JydXB0aW9uLgoJKiB1dGlsLmMgKGR1bXBpb3YpIFtIQVZFX1NZU19VSU9fSF06IENoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93CglkdXJpbmcgbWFsbG9jIHNpemUgY2FsY3VsYXRpb24sIHRvIGF2b2lkIGhlYXAgY29ycnVwdGlvbi4KCUZpeGVzIFJIIzE1OTE5Ni4KCgkqIHV0aWwuYyAocHJpbnR4dmFsKTogQ2hhbmdlIHRoaXJkIGFyZ3VtZW50IGZyb20gImNoYXIgKiIgdG8KCSJjb25zdCBjaGFyICoiLgoJKHByaW50ZmxhZ3MpOiBBZGQgdGhpcmQgYXJndW1lbnQsICJjb25zdCBjaGFyICoiLCB3aXRoIHNpbWlsYXIKCW1lYW5pbmcgdG8gdGhlIHRoaXJkIGFyZ3VtZW50IG9mIHByaW50eHZhbCgpLgoJKiBkZWZzLmggKHByaW50eHZhbCk6IENoYW5nZSB0aGlyZCBhcmd1bWVudCBmcm9tICJjaGFyICoiIHRvCgkiY29uc3QgY2hhciAqIi4KCShwcmludGZsYWdzKTogQWRkIHRoaXJkIGFyZ3VtZW50LgoJKiBiam0uYyAoc3lzX3F1ZXJ5X21vZHVsZSkgW0xJTlVYXTogUGFzcyB0aGlyZCBhcmd1bWVudCB0bwoJcHJpbnRmbGFncygpLgoJKiBkZXNjLmMgKHN5c19mY250bCk6IExpa2V3aXNlLgoJKHN5c19mbG9jaykgW0xPQ0tfU0hdOiBMaWtld2lzZS4KCShwcmludF9lcG9sbF9ldmVudCkgW0hBVkVfU1lTX0VQT0xMX0hdOiBMaWtld2lzZS4KCSogZmlsZS5jIChzeXNfb3Blbik6IExpa2V3aXNlLgoJKHNvbGFyaXNfb3BlbikgW0xJTlVYU1BBUkNdOiBMaWtld2lzZS4KCShzeXNfYWNjZXNzKTogTGlrZXdpc2UuCgkoc3lzX2NoZmxhZ3MsIHN5c19mY2hmbGFncykgW0ZSRUVCU0RdOiBMaWtld2lzZS4KCShyZWFscHJpbnRzdGF0KSBbSEFWRV9MT05HX0xPTkdfT0ZGX1QgJiYKCUhBVkVfU1RSVUNUX1NUQVRfU1RfRkxBR1NdOiBMaWtld2lzZS4KCShwcmludHN0YXQ2NCkgW0hBVkVfU1RBVDY0ICYmCglIQVZFX1NUUlVDVF9TVEFUX1NUX0ZMQUdTXTogTGlrZXdpc2UuCgkoc3lzX3NldHhhdHRyLCBzeXNfZnNldHhhdHRyKTogTGlrZXdpc2UuCgkqIGlwYy5jIChzeXNfbXNnZ2V0LCBzeXNfbXNnc25kLCBzeXNfbXNncmN2LCBzeXNfc2VtZ2V0LAoJc3lzX3NobWdldCwgc3lzX3NobWF0KSBbTElOVVggfHwgU1VOT1M0IHx8IEZSRUVCU0RdOiBMaWtld2lzZS4KCShzeXNfbXFfb3BlbikgW0xJTlVYXTogTGlrZXdpc2UuCgkocHJpbnRtcWF0dHIpIFtIQVZFX01RVUVVRV9IXTogTGlrZXdpc2UuCgkqIG1lbS5jIChwcmludF9tbWFwKSBbIUhBVkVfTE9OR19MT05HX09GRl9UXTogTGlrZXdpc2UuCgkoc3lzX21tYXA2NCkgW19MRlM2NF9MQVJHRUZJTEUgfHwgSEFWRV9MT05HX0xPTkdfT0ZGX1RdOiBMaWtld2lzZS4KCShzeXNfbXByb3RlY3QpOiBMaWtld2lzZS4KCShzeXNfbXJlbWFwLCBzeXNfbWFkdmlzZSwgc3lzX21sb2NrYWxsKSBbTElOVVhdOiBMaWtld2lzZS4KCShzeXNfbXN5bmMpIFtNU19BU1lOQ106IExpa2V3aXNlLgoJKHN5c19tY3RsKSBbTUNfU1lOQ106IExpa2V3aXNlLgoJKHN5c19yZW1hcF9maWxlX3BhZ2VzLCBzeXNfbWJpbmQsIHN5c19nZXRfbWVtcG9saWN5KSBbTElOVVhdOgoJTGlrZXdpc2UuCgkqIG5ldC5jIChwcmludG1zZ2hkcikgW0hBVkVfU1RSVUNUX01TR0hEUl9NU0dfQ09OVFJPTF06IExpa2V3aXNlLgoJKHN5c19zZW5kLCBzeXNfc2VuZHRvKTogTGlrZXdpc2UuCgkoc3lzX3NlbmRtc2cpIFtIQVZFX1NFTkRNU0ddOiBMaWtld2lzZS4KCShzeXNfcmVjdiwgc3lzX3JlY3Zmcm9tKTogTGlrZXdpc2UuCgkoc3lzX3JlY3Ztc2cpIFtIQVZFX1NFTkRNU0ddOiBMaWtld2lzZS4KCShwcmludGljbXBmaWx0ZXIpIFtJQ01QX0ZJTFRFUl06IExpa2V3aXNlLgoJKiBwcm9jLmMgKHByb2NfaW9jdGwpIFtTVlI0ICYmICFIQVZFX01QX1BST0NGUyB8fCBGUkVFQlNEXTogTGlrZXdpc2UuCgkqIHByb2Nlc3MuYyAoc3lzX2Nsb25lKSBbTElOVVhdOiBMaWtld2lzZS4KCShwcmludHdhaXRuKTogTGlrZXdpc2UuCgkoc3lzX3dhaXRpZCkgW1NWUjQgfHwgTElOVVhdOiBMaWtld2lzZS4KCSogc2lnbmFsLmMgKHN5c19zaWd2ZWMpIFtTVU5PUzQgfHwgRlJFRUJTRF06IExpa2V3aXNlLgoJKHN5c19zaWdhY3Rpb24pOiBMaWtld2lzZS4KCShwcmludGNvbnRleHQpIFtTVlI0XTogTGlrZXdpc2UuCgkocHJpbnRfc3RhY2tfdCkgW0xJTlVYKSB8fCBGUkVFQlNEXTogTGlrZXdpc2UuCgkoc3lzX3J0X3NpZ2FjdGlvbikgW0xJTlVYXTogTGlrZXdpc2UuCgkqIHNvY2suYyAoc29ja19pb2N0bCkgW0xJTlVYXTogTGlrZXdpc2UuCgkqIHN0cmVhbS5jIChzeXNfcHV0bXNnLCBzeXNfZ2V0bXNnKTogTGlrZXdpc2UuCgkoc3lzX3B1dHBtc2cpIFtTWVNfcHV0cG1zZ106IExpa2V3aXNlLgoJKHN5c19nZXRwbXNnKSBbU1lTX2dldHBtc2ddOiBMaWtld2lzZS4KCShzeXNfcG9sbCk6IExpa2V3aXNlLgoJKHByaW50X3RyYW5zcG9ydF9tZXNzYWdlKSBbVElfQklORF06IExpa2V3aXNlLgoJKHN0cmVhbV9pb2N0bCk6IExpa2V3aXNlLgoJKiBzeXN0ZW0uYyAoc3lzX21vdW50LCBzeXNfcmVib290KTogTGlrZXdpc2UuCgkoc3lzX2NhY2hlZmx1c2gpIFtMSU5VWCAmJiBNNjhLXTogTGlrZXdpc2UuCgkoc3lzX2NhcGdldCwgc3lzX2NhcHNldCkgW1NZU19jYXBnZXRdOiBMaWtld2lzZS4KCSogdGVybS5jICh0ZXJtX2lvY3RsKSBbVElPQ01HRVRdOiBMaWtld2lzZS4KCSogdGltZS5jIChzeXNfY2xvY2tfbmFub3NsZWVwLCBzeXNfdGltZXJfc2V0dGltZSkgW0xJTlVYXToKCUxpa2V3aXNlLgoJRml4ZXMgUkgjMTU5MzEwLgoKCSogYmptLmMgKHN5c19xdWVyeV9tb2R1bGUpIFtMSU5VWF06IFVuaXRpemUgIm91dCBvZiBtZW1vcnkiCgllcnJvcnMgcmVwb3J0aW5nIHN0eWxlLgoJKiBzdHJhY2UuYyAocmVidWlsZF9wb2xsdikgW1VTRV9QUk9DRlNdOiBMaWtld2lzZS4KCSogc3lzdGVtLmMgKHN5c19jYXBnZXQsIHN5c19jYXBzZXQpIFtTWVNfY2FwZ2V0XTogTGlrZXdpc2UuCgkqIHV0aWwuYyAocHJpbnRzdHIpOiBMaWtld2lzZS4KCShkdW1waW92KSBbSEFWRV9TWVNfVUlPX0hdOiBMaWtld2lzZS4KCShmaXh2Zm9yaykgW1NVTk9TNF06IExpa2V3aXNlLgoJKiBkZXNjLmMgKGRlY29kZV9zZWxlY3QpOiBDb250aW51ZSB0byBkZWNvZGUgc3lzY2FsbCBhcmd1bWVudHMKCWluIGNhc2Ugb2YgT09NIGNvbmRpdGlvbi4KCSogZmlsZS5jIChzeXNfZ2V0ZGVudHMpOiBMaWtld2lzZS4KCShzeXNfZ2V0ZGVudHM2NCkgW19MRlM2NF9MQVJHRUZJTEVdOiBMaWtld2lzZS4KCShzeXNfZ2V0ZGlyZW50cmllcykgW0ZSRUVCU0RdOiBMaWtld2lzZS4KCSogbWVtLmMgKHN5c19taW5jb3JlKTogQ2hhbmdlZCB0eXBlIG9mIHZhcmlhYmxlcyB3aGljaCBkZWFsIHdpdGgKCW1hbGxvYyBzaXplIGZyb20gaW50IHRvIHVuc2lnbmVkIGxvbmcuCglGaXhlcyBSSCMxNTkzMDguCgoyMDA1LTA1LTIyICBEbWl0cnkgVi4gTGV2aW4gIDxsZHZAYWx0bGludXgub3JnPgoKCSogYmptLmMgW0xJTlVYXTogRG8gbm90IGluY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4uICBJdCBpcyBub3QKCXNhZmUgdG8gaW5jbHVkZSBrZXJuZWwgaGVhZGVycywgYW5kIHRoaXMgb25lIGlzIG5vdCB1c2VkIGFueXdheS4KCUZpeGVzIFJIIzE1ODQ4OC4KCjIwMDUtMDUtMjYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXN0ZW0uYyAoc3lzX3N5c2N0bCk6IENoZWNrIGZvciBlcnJvcnMgYWNjZXNzaW5nIHVzZXIgcG9pbnRlcnMuCglVc2UgbWFsbG9jIGluc3RlYWQgb2YgYWxsb2NhIGluIGNhc2Ugc2l6ZSBpcyBpbnNhbmUuCgoyMDA1LTA1LTA5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgbGliYWlvLmguCgkqIGRlc2MuYyAoc3lzX2lvX3NldHVwLCBzeXNfaW9fc3VibWl0LCBzeXNfaW9fY2FuY2VsLAoJc3lzX2lvX2dldGV2ZW50cywgc3lzX2lvX2Rlc3Ryb3kpOiBOZXcgZnVuY3Rpb25zLgoJKiBsaW51eC9zeXNjYWxsLmg6IERlY2xhcmUgdGhlbS4KCSogbGludXgvc3lzY2FsbGVudC5oOiBVc2UgdGhvc2UgZm9yIGlvXyogc3lzY2FsbHMuCgkqIGxpbnV4L2FscGhhL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L2hwcGEvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvczM5MC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zMzkweC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCUZyb20gWmFjaCBCcm93biA8emFjaC5icm93bkBvcmFjbGUuY29tPi4KCUZpeGVzIFJIIzE1NTA2NS4KCgkqIGRlYmlhbi9jb250cm9sIChBcmNoaXRlY3R1cmUpOiBBZGQgcHBjNjQuCglGaXhlcyBEZWJpYW4gYnVnICMzMDEwODkuCgoyMDA1LTA1LTA1ICBBbnRvbiBCbGFuY2hhcmQgIDxhbnRvbkBzYW1iYS5vcmc+CgoJKiBwcm9jZXNzLmMgKHB0cmFjZV9jbWRzKTogQWRkIFBUUkFDRV9HRVRWUlJFR1MgYW5kIFBUUkFDRV9TRVRWUlJFR1MKCWlmIGRlZmluZWQuCgoyMDA1LTA1LTA5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3RyYWNlLmMgKG1haW4pOiBSZWZ1c2UgbmVnYXRpdmUgLXMgYXJndW1lbnQgdmFsdWUuCglGaXhlcyBEZWJpYW4gYnVnICMzMDMyNTYuCgoyMDA1LTA0LTI1ICBBbnRvbiBCbGFuY2hhcmQgIDxhbnRvbkBzYW1iYS5vcmc+CgoJKiBmaWxlLmMgKG9wZW5tb2Rlcyk6IEFkZCBPX05PQVRJTUUgZmxhZyBpZiBkZWZpbmVkLgoKMjAwNS0wNC0wNSAgQW50b24gQmxhbmNoYXJkICA8YW50b25Ac2FtYmEub3JnPgoKCSogbGludXgvcG93ZXJwYy9pb2N0bGVudC5oOiBSZWdlbmVyYXRlZC4KCgkqIHNpZ25hbC5jIChzaWduYW1lKTogRG9uJ3QgdHJ5IGFuZCBkZXJlZmVyZW5jZSBuZWdhdGl2ZSBpbmRleC4KCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBBZGQgZGVidWdfc2V0Y29udGV4dCwgdnNlcnZlciwKCW1iaW5kLCAqX21lbXBvbGljeSwgbXFfKiwgc3lzX2tleGVjX2xvYWQsIGFkZF9rZXksIHJlcXVlc3Rfa2V5LAoJa2V5Y3RsLCB3YWl0aWQsIHN5c19zZW10aW1lZG9wLiAgRml4IHZhcmlvdXMgb3RoZXIgc3lzY2FsbHMuCgoJKiBpcGMuYyAoc2htX3Jlc291cmNlX2ZsYWdzKTogTmV3IHZhcmlhYmxlLCB0YWJsZSBoYXMgU0hNX0hVR0VUTEIKCWJ1dCBub3QgSVBDX05PV0FJVCwgd2hpY2ggaGF2ZSB0aGUgc2FtZSB2YWx1ZS4KCShzeXNfc2htZ2V0KTogVXNlIHRoYXQgaW5zdGVhZCBvZiByZXNvdXJjZV9mbGFncy4KCjIwMDUtMDMtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBkZXNjLmMgKGRlY29kZV9zZWxlY3QpOiBJbmNyZWFzZSBsb2NhbCBidWZmZXIgc2l6ZS4KCUZpeGVzIFJIIzE1MTU3MC4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjUuMTEuCgkqIGRlYmlhbi9jaGFuZ2Vsb2csIHN0cmFjZS5zcGVjOiA0LjUuMTEtMS4KCgkqIGxpbnV4L2FybS9zeXNjYWxsZW50Lmg6IEZpeCAxMTMgZW50cnkgKHN5c2NhbGwsIG5vdCB2bTg2b2xkKS4KCjIwMDUtMDMtMTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC41LjEwLgoJKiBkZWJpYW4vY2hhbmdlbG9nLCBzdHJhY2Uuc3BlYzogNC41LjEwLTEuCgoyMDA1LTAyLTI2ICBHT1RPIE1hc2Fub3JpICA8Z290b21AZGViaWFuLm9yLmpwPgoKCSogbGludXgvYWxwaGEvc3lzY2FsbGVudC5oOiBGaXggdGhlIHJldmVyc2VkIG9yZGVyIG9mIGxzdGF0NjQgYW5kCglmc3RhdDY0LiAgQ2xlYW4gdXAgb3NmX25yZWN2bXNnIGFuZCBvc2ZfbmdldHNvY2tuYW1lLgoKMjAwNS0wMi0yOCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KCgkqIHN5c2NhbGwuYyAoZ2V0cnZhbDIpOiBNb3ZlICNpZmRlZiBJQTY0IGluc2lkZSAjaWZkZWYgTElOVVguCgoyMDA1LTAzLTE0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvbWlwcy9zeXNjYWxsZW50Lmg6IFVwZGF0ZSB2YXJpb3VzIGNhbGxzLgoJRnJvbSBUaGllbW8gU2V1ZmVyIDx0aHNAbmV0d29ya25vLmRlPi4KCUZpeGVzIERlYmlhbiBidWcgIzI1NjY4NC4KCgkqIGRlYmlhbi9jb250cm9sIChBcmNoaXRlY3R1cmUpOiBBZGQgczM5MC4KCUZpeGVzIERlYmlhbiBidWcgIzI5NDE3Mi4KCjIwMDUtMDMtMDYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzdHJhY2UuYyAodHJhY2UpIFtQVFJBQ0VfR0VUU0lHSU5GT106IEZldGNoIHNpZ2luZm9fdCBmb3IgU0lHU0VHVgoJYW5kIFNJR0JVUyBzaWduYWxzLCB1c2Ugc2lfYWRkciBpbiBvdXRwdXQuCgoyMDA1LTAzLTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogZmlsZS5jIChwcmludF94YXR0cl92YWwpOiBBZGQgYSBjYXN0LgoKMjAwNS0wMi0wNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGRlc2MuYyAoZGVjb2RlX3NlbGVjdCk6IENhbGN1bGF0ZSBzaXplIG9mIHBhc3NlZCBmZF9zZXQgdmVjdG9ycyBhbmQKCWNvcHkgaW4gdGhlIHVzZXIncyBzaXplIHJhdGhlciB0aGFuIHRoZSBzdGFuZGFyZCBzaXplb2YoZmRfc2V0KS4KCUZpeGVzIERlYmlhbiBidWcgIzY1NjU0LCAjMjg0MjkwLgoKCSogdXRpbC5jIChwcmludHBhdGgsIHByaW50cGF0aG4pOiBQcmludCBOVUxMIGFuZCBkb24ndCB0cnkgYW55IGZldGNoCgl3aGVuIEFERFIgaXMgemVyby4KCUZpeGVzIERlYmlhbiBidWcgIzYzMDkzLgoKCSogZGViaWFuL2NvbnRyb2wgKEJ1aWxkLURlcGVuZHMpOiBGaXggZm9yIHMzOTAgYW5kIHNwYXJjLgoJRnJvbSBCYXN0aWFuIEJsYW5rIDx3YWxkaUBkZWJpYW4ub3JnPi4KCUZpeGVzIERlYmlhbiBidWcgIzI5MzU2NC4KCjIwMDQtMTItMTkgIERtaXRyeSBWLiBMZXZpbiAgPGxkdkBhbHRsaW51eC5vcmc+CgoJKiBzdHJhY2UuYyAobWFpbikgWyFVU0VfUFJPQ0ZTXTogSW4gY2hpbGQgcHJvY2VzcywgcmFpc2UgU0lHU1RPUAoJcmlnaHQgYmVmb3JlIGV4ZWN2KCkgY2FsbC4gIFJlbW92ZSBmYWtlX2V4ZWN2ZSgpIGNhbGwuCgkqIGRlZnMuaCAoZmFrZV9leGVjdmUpOiBSZW1vdmUgdW51c2VkIGRlY2xhcmF0aW9uLgoJKiBwcm9jZXNzLmMgKGZha2VfZXhlY3ZlKTogUmVtb3ZlIHVudXNlZCBmdW5jdGlvbi4KCUZpeGVzIFJIIzE0MzM2NS4KCjIwMDUtMDItMDQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC41LjkuCgkqIGRlYmlhbi9jaGFuZ2Vsb2csIHN0cmFjZS5zcGVjOiA0LjUuOS0yLgoKCSogZmlsZS5jIChPX0xBUkdFRklMRSk6IE9taXQgd2hlbiAjdW5kZWYnZCBiZWNhdXNlIGl0IHdhcyB6ZXJvLgoKMjAwNS0wMi0wMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGRlYmlhbi9jb250cm9sOiBBZGQgc3RyYWNlLXVkZWIgcGFja2FnZSBmb3IgaW5zdGFsbGVyIGRlYnVnZ2luZy4KCSogZGViaWFuL3J1bGVzIChiaW5hcnktYXJjaCk6IEJ1aWxkIGl0LgoJRnJvbSBKb3NodWEgS3dhbiA8am9zaGtAdHJpcGxlaGVsaXgub3JnPi4KCUZpeGVzIERlYmlhbiBidWcgIzI2ODI5NC4KCgkqIGZpbGUuYyAob3Blbm1vZGVzKSBbT19MQVJHRUZJTEVdIFtPX0xBUkdFRklMRSA9PSAwXTogUmVkZWZpbmUgdG8KCWtub3duIHZhbHVlcyBmb3IgTGludXguCgoJKiB1dGlsLmMgKHByaW50Y2FsbCk6IFByaW50IDE2ID9zIHdoZW4gbG9uZyBpcyA4IGJ5dGVzLgoJRml4ZXMgUkgjMTQ2OTMyLgoKCSogbGludXgvc3BhcmMvc3lzY2FsbC5oOiBEZWNsYXJlIHN5c19lcG9sbF9jcmVhdGUsIHN5c19lcG9sbF9jdGwsCglzeXNfZXBvbGxfd2FpdC4KCSogbGludXgvc3BhcmM2NC9zeXNjYWxsLmg6IEp1c3QgI2luY2x1ZGUgIi4uL3NwYXJjL3N5c2NhbGwuaCIgaGVyZS4KCSogaW9jdGwuYyAobmlvY3RsZW50czIpOiBBZGQgY29uc3QgdG8gdHlwZS4KCUZpeGVzIERlYmlhbiBidWcgIzI3ODQ0OS4KCgkqIHNvY2suYyAoaWZmZmxhZ3MpOiBOZXcgdmFyaWFibGUsIHRhYmxlIG9mIElGRl8qIHZhbHVlcy4KCShwcmludF9hZGRyKTogTmV3IGZ1bmN0aW9uLgoJKHNvY2tfaW9jdGwpOiBIYW5kbGUgU0lPQ0dJRkFERFIsIFNJT0NHSUZEU1RBRERSLCBTSU9DR0lGQlJEQUREUiwKCVNJT0NHSUZORVRNQVNLLCBTSU9DR0lGRkxBR1MsIFNJT0NHSUZNRVRSSUMsIFNJT0NHSUZNVFUsIFNJT0NHSUZTTEFWRSwKCVNJT0NHSUZIV0FERFIuCVVzZSBwcmludF9hZGRyIGZvciBTSU9DR0lGQ09ORiwgU0lPQ0dJRk5BTUUsIGFuZAoJU0lPQ0dJRklOREVYLCBhbmQgZml4IHRoZWlyIG91dHB1dC4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCglGaXhlcyBSSCMxMzgyMjMuCglGaXhlcyBEZWJpYW4gYnVnICMxOTIxNjQuCgoyMDA0LTEyLTIwICBEbWl0cnkgVi4gTGV2aW4gIDxsZHZAYWx0bGludXgub3JnPgoKCSogY29uZmlndXJlLmFjOiBVc2UgQUNfR05VX1NPVVJDRSBtYWNybyBpbnN0ZWFkIG9mIGNoYW5naW5nIENGTEFHUy4KCSogZGVmcy5oIFtIQVZFX0NPTkZJR19IXTogSW5jbHVkZSBjb25maWcuaCBmaXJzdC4KCSogc3RyYWNlLmM6IEluY2x1ZGUgImRlZnMuaCIgZmlyc3QuCglGaXhlcyBSSCMxNDMzNzAuCgoJKiBzeXNjYWxsLmMgKGNhbGxfc3VtbWFyeSk6IEZpeCBwb3RlbnRpYWwgTlVMTCBkZXJlZmVyZW5jZS4KCUZpeGVzIFJIIzE0MzM2OS4KCjIwMDQtMTItMTkgIERtaXRyeSBWLiBMZXZpbiAgPGxkdkBhbHRsaW51eC5vcmc+CgoJKiBzeXNjYWxsLmMgKHF1YWxfc2lnbmFsKTogQ2hlY2sgYm91bmRzIGZvciBudW1lcmljIHNpZ25hbCBuYW1lcy4KCUZpeCBwYXJzZXIgb2Ygc3ltYm9saWMgc2lnbmFsIG5hbWVzLgoJRml4IHJldHVybiBjb2RlLCBhcyByZXF1aXJlZCBieSBxdWFsaWZ5KCkgZnVuY3Rpb24uCgkqIHN5c2NhbGwuYyAocXVhbF9kZXNjKTogQ2hlY2sgYm91bmRzIGZvciBkZXNjcmlwdG9yIG51bWJlci4KCSogc3lzY2FsbC5jIChxdWFsX3N5c2NhbGwpOiBDb3JyZWN0IHJldHVybiBjb2RlLCB0byBiZSBjb25zaXN0ZW50Cgl3aXRoIHF1YWxpZnkoKSBhbmQgb3RoZXIgcXVhbF8qIGZ1bmN0aW9ucy4KCUZpeGVzIFJIIzE0MzM2Mi4KCjIwMDUtMDItMDEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXN0ZW0uYyBbTElOVVhdIChNU19NQU5ETE9DSywgTVNfTk9BVElNRSwgTVNfTk9ESVJBVElNRSwgTVNfQklORCwKCU1TX01PVkUsIE1TX1JFQywgTVNfVkVSQk9TRSwgTVNfUE9TSVhBQ0wsIE1TX0FDVElWRSwgTVNfTk9VU0VSKToKCU5ldyBtYWNyb3MuCglbTElOVVhdIChtb3VudF9mbGFncyk6IEFkZCB0aGVtLgoJW0xJTlVYXSAoc3lzX21vdW50KTogSWYgYW55IG9mIChNU19CSU5EfE1TX01PVkV8TVNfUkVNT1VOVCkgYml0cyBhcmUKCXNldCBpbiB0aGUgZmxhZ3MgYXJndW1lbnQsIGRvbid0IHRyeSB0byBmZXRjaCB0aGUgZmlsZXN5c3RlbSBzdHJpbmcuCglGaXhlcyBSSCMxNDE5MzIuCgoJKiBjb25maWcuZ3Vlc3M6IFVwZGF0ZSBmcm9tIGNhbm9uaWNhbCB2ZXJzaW9uLCB0aW1lc3RhbXAgMjAwNC0xMS0xMi4KCSogY29uZmlnLnN1YjogTGlrZXdpc2UsIHRpbWVzdGFtcCAyMDA0LTExLTMwLgoKCSogcHJvY2Vzcy5jIFtMSU5VWF0gW1g4Nl82NF0gKHN5c19hcmNoX3ByY3RsKTogTmV3IGZ1bmN0aW9uLgoJKiBsaW51eC9zeXNjYWxsLmg6IERlY2xhcmUgaXQuCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50Lmg6IFVzZSBpdC4KCVBhcnQgb2YgUkgjMTQyNjY3LgoKCSogcHJvY2Vzcy5jIChzeXNfc2NoZWRfc2V0c2NoZWR1bGVyKTogVXNlICUjbHggZm9ybWF0IGZvciBiYWQgcG9pbnRlci4KCShzeXNfc2NoZWRfZ2V0cGFyYW0sIHN5c19zY2hlZF9zZXRwYXJhbSk6IExpa2V3aXNlLgoJUGFydCBvZiBSSCMxNDI2NjcuCgoJKiBzaWduYWwuYyBbSEFWRV9TSUdBQ1RJT05dIFtMSU5VWCAmJiBYODZfNjRdIChTQV9SRVNUT1JFUik6IERlZmluZQoJaGVyZSB0b28uCglQYXJ0IG9mIFJIIzE0MjY2Ny4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXNlIHN5c19taW5jb3JlIGluc3RlYWQgb2YgcHJpbnRhcmdzLgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4gIEFsc28gdXNlIHN5c19nZXRybGltaXQsCglzeXNfc2VtdGltZWRvcCwgc3lzX3Vtb3VudDIuCglQYXJ0IG9mIFJIIzE0MjY2Ny4KCgkqIHN5c2NhbGwuYyAocXVhbF9zaWduYWwpOiBGaXggaW52ZXJ0ZWQgcmV0dXJuIHZhbHVlIGFuZCBib2d1cwoJYXJndW1lbnQgdG8gcXVhbGlmeV9vbmUgaW4gdGhlIG5hbWVkIGNhc2UuCgoJKiBmaWxlLmMgKHByaW50X3hhdHRyX3ZhbCk6IERvbid0IHVzZSBhdXRvIGFycmF5IHNpemVkIGJ5IHN5c2NhbGwKCWFyZ3VtZW50LiAgVXNlIG1hbGxvYyBpbnN0ZWFkLCBzbyBpdCBjYW4gZmFpbCBmb3IgaW5zYW5lIHZhbHVlcy4KCUZpeGVzIERlYmlhbiBidWcgIzI4MzcwNC4KCgkqIG5ldC5jIChzeXNfZ2V0c29ja29wdCk6IEZpeCBhIGZvcm1hdCAlbGQgLT4gJWQuCgoJKiBsaW51eC9zeXNjYWxsLmggW0lBNjRdIChTWVNfc2VtdGltZWRvcCk6ICN1bmRlZiBpdC4KCgkqIHN5c2NhbGwuYyAoc3lzY2FsbF9lbnRlcikgW1g4Nl82NF06IEZpeCAzMi1iaXQgYXJndW1lbnQgcmVnaXN0ZXIgbWFwCglub3QgdG8gZG91YmxlIHRoZSBtaWRkbGUgZW50cnkhCglGaXhlcyBSSCMxNDYwOTMuCgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBGaXggZXhpdF9ncm91cCBlbnRyeS4KCgkqIHV0aWwuYyAoZ2V0cGMpIFtTMzkwIHx8IFMzOTBYXTogSW1wbGVtZW50IGl0LgoJUGF0Y2ggYnkgRGF2aWQgV2lsZGVyIDx3aWxkZXJAdXMuaWJtLmNvbT4uCgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogQWRkIGZhZHZpc2U2NCwgZnN0YXRmczY0LCBzdGF0ZnM2NCwgbWJpbmQsCglbZ3NdZXRfbWVtcG9saWN5LCBtcV8qLCBzeXNfa2V4ZWNfbG9hZCwgdnNlcnZlciwgYW5kIHdhaXRpZC4KCUZpeGVzIFJIIzE0NjI0NS4KCjIwMDUtMDEtMjIgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CgoJKiBuZXQuYyAoc3lzX2dldHNvY2tvcHQpOiBDaGFuZ2UgdHlwZSBvZiBsZW4gdG8gaW50LgoKMjAwNC0xMC0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjUuOC4KCSogZGViaWFuL2NoYW5nZWxvZywgc3RyYWNlLnNwZWM6IDQuNS44LTEuCgoJKiBmaWxlLmMgKHN5c19mYWR2aXNlNjQpOiBDb25kaXRpb25hbGl6ZSBqdXN0IG9uIFtMSU5VWF0uCgoJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBzeXMvZXBvbGwuaC4KCSogZGVzYy5jOiBQcm90ZWN0ICNpbmNsdWRlIDxzeXMvZXBvbGwuaD4gd2l0aCBbSEFWRV9TWVNfRVBPTExfSF0uCgkoZXBvbGxjdGxzLCBlcG9sbGV2ZW50cyk6IFByb3RlY3QgZWFjaCBlbnRyeSB3aXRoICNpZmRlZiBvbiBpdHMgbWFjcm8uCgoJKiBzdHJhY2UuYyAoaGFuZGxlX2dyb3VwX2V4aXQpOiBEb24ndCBkZXRhY2ggbGVhZGVyIHRoYXQgd2Fzbid0CglUQ0JfQVRUQUNIRUQuICBJbnN0ZWFkIG1hcmsgaXQgd2l0aCBUQ0JfR1JPVVBfRVhJVElORy4KCVJlbW92ZSBkcm9wdGNiIGxvb3AgYXQgZW5kLCBubyBsb25nZXIgcmVxdWlyZWQgc2luY2UgMi42IHJlcG9ydHMgZWFjaAoJdGhyZWFkIGRlYXRoLgoJRml4ZXMgUkgjMTM1MjU0LgoKCSogc3RyYWNlLmMgKHRyYWNlKTogVXNlIGhhbmRsZV9ncm91cF9leGl0IGZvciBub24tVENCX0FUVEFDSEVEIGNoaWxkCgl0YWtpbmcgc2lnbmFsIHdoZW4gaXQgaGFzIG5jbG9uZV90aHJlYWRzID4gMC4KCgkqIHN0cmFjZS5jIChoYW5kbGVfZ3JvdXBfZXhpdCwgdHJhY2UpOiBNYXJrIGxlYWRlciB3aXRoCglUQ0JfR1JPVVBfRVhJVElORyBhbmQgZG9uJ3QgYmUgc3VycHJpc2VkIGF0IGNoaWxkIGRlYXRocyB3aGVuIHRoZWlyCglsZWFkZXIgaGFzIGl0IHNldC4KCUZpeGVzIFJIIzEzMjE1MC4KCgkqIHByb2Nlc3MuYyAoV0NPUkVGTEFHKTogRGVmaW5lIGlmIG5vdCBkZWZpbmVkLgoJKFdfU1RPUENPREUsIFdfRVhJVENPREUpOiBMaWtld2lzZS4KCVJlcG9ydGVkIGJ5IE1hcnR5IExlaXNuZXIgPG1sZWlzbmVyQGVuZy5tYy54ZXJveC5jb20+LgoKCSogc29jay5jIFshIExJTlVYXTogSW5jbHVkZSA8c3lzL3NvY2tldC5oPiBiZWZvcmUgPHN5cy9zb2NraW8uaD4uCglSZXBvcnRlZCBieSBNYXJ0eSBMZWlzbmVyIDxtbGVpc25lckBlbmcubWMueGVyb3guY29tPi4KCgkqIGRlYmlhbi9ydWxlczogTWFrZSBzdHJhY2U2NC4xLmd6IHN5bWxpbmsgdG8gc3RyYWNlLjEuZ3ogaW5zdGVhZCBvZgoJc3RyYWNlNjQuMSB0byBzdHJhY2UuMSwgd2hpY2ggZG9lc24ndCBleGlzdC4KCUZpeGVzIERlYmlhbiBidWcgIzI2OTIyMC4KCjIwMDQtMDktMDUgIFBoaWwgQmx1bmRlbGwgIDxwYkBuZXh1cy5jby51az4KCgkqIGxpbnV4L2FybS9zeXNjYWxsZW50Lmg6IE5ldyBmaWxlLgoKMjAwNC0xMC0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGRlYmlhbi9ydWxlcyAoREVCX0JVSUxEX0dOVV9UWVBFLCBDT05GSUdfT1BUUyk6IE5ldyB2YXJpYWJsZXMuCglbJChERUJfSE9TVF9HTlVfVFlQRSkgPT0gczM5MC1saW51eF0gKGJ1aWxkNjQsIEhPU1Q2NCwgQ0M2NCk6IFNldCB0aGVtLgoJKGJ1aWxkL01ha2VmaWxlKTogVXNlICQoQ09ORklHX09QVFMpLgoJKGJ1aWxkNjQvTWFrZWZpbGUpOiBQYXNzIC0taG9zdCBhcyB3ZWxsIGFzIC0tYnVpbGQuCglGcm9tIEJhc3RpYW4gQmxhbmsgPHdhbGRpQGRlYmlhbi5vcmc+LgoJRml4ZXMgRGViaWFuIGJ1ZyAjMjcxNTAwLgoKCSogbGludXgvaHBwYS9zeXNjYWxsZW50Lmg6IFVwZGF0ZSBmb3IgMi42Ljkgc3lzY2FsbHMuCglGcm9tIFJhbmRvbHBoIENodW5nIDx0YXVzcUBkZWJpYW4ub3JnPgoJRml4ZXMgRGViaWFuIGJ1ZyAjMjczODg3LgoKCSogZmlsZS5jIChzeXNfbGxzZWVrKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgoKMjAwNC0wOS0xNCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAdHdpZGRsZS5uZXQ+CgoJKiBsaW51eC9hbHBoYS9zeXNjYWxsZW50Lmg6IEFkZCB0Z2tpbGwsICpzdGF0NjQsIHZzZXJ2ZXIsIG1iaW5kLAoJW2dzXWV0X21lbXBvbGljeSwgbXFfKiwgd2FpdGlkLgoKMjAwNC0xMC0wNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGZpbGUuYyAoc3lzX2xsc3Nlaywgc3lzX3JlYWRhaGVhZCwgc3lzX2ZhZHZpc2U2NCwgc3lzX2ZhZHZpc2U2NF82NCk6CglVc2UgTE9OR19MT05HIG1hY3JvLgoJKiBpby5jIChzeXNfcHJlYWQsIHN5c19wd3JpdGUsIHN5c19zZW5kZmlsZSk6IExpa2V3aXNlLgoKCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogRml4IGJvdGNoZWQgdGFibGUgZW50cmllcy4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCgoJKiBtZW0uYyBbTElOVVhdIChzeXNfbWJpbmQsIHN5c19zZXRfbWVtcG9saWN5LCBzeXNfZ2V0X21lbXBvbGljeSk6CglOZXcgZnVuY3Rpb25zLgoJKiBsaW51eC9zeXNjYWxsLmg6IERlY2xhcmUgdGhlbS4KCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoKCSogbGludXgvc3lzY2FsbGVudC5oOiBIYW5kbGUgbWJpbmQsIHNldF9tZW1wb2xpY3ksIGdldF9tZW1wb2xpY3kuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoKCSogZmlsZS5jIFtMSU5VWCAmJiAoSTM4NiB8fCBYODZfNjQpXSAoc3lzX2ZhZHZpc2U2NCwgc3lzX2ZhZHZpc2U2NF82NCk6CglOZXcgZnVuY3Rpb25zLgoJKiBsaW51eC9zeXNjYWxsLmg6IERlY2xhcmUgdGhlbS4KCSogbGludXgvc3lzY2FsbGVudC5oOiBIYW5kbGUgZmFkdmlzZTY0IGFuZCBmYWR2aXNlNjRfNjQgdXNpbmcgdGhvc2UuCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCjIwMDQtMDktMTMgIERtaXRyeSBWLiBMZXZpbiAgPGxkdkBhbHRsaW51eC5vcmc+CgoJKiBsaW51eC9pb2N0bHNvcnQuYyAobWFpbik6IE9taXQgZHVwbGljYXRlIGxpbmVzCgkod2l0aCBzYW1lIG5hbWUgYW5kIGNvZGUpIGZyb20gb3V0cHV0LgoJKiBsaW51eC9pb2N0bGVudC5zaDogQnVpbGQgdGhlIGxpc3Qgb2YgaW9jdGxzIGRlZmluZWQgaW4KCXNjc2kvc2cuaCAoMHgyMi4uKSwgc2NzaS9zY3NpLmggYW5kIHNjc2kvc2NzaV9pb2N0bC5oICgweDUzLi4pLAoJYXMgc3VnZ2VzdGVkIGJ5IFBldGVyIEpvbmVzIDxwam9uZXNAcmVkaGF0LmNvbT4KCSogbGludXgvaW9jdGxlbnQuaDogUmVnZW5lcmF0ZWQuCglGaXhlcyBSSCMxMjk4MDguCgoyMDA0LTA5LTEzICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPgoJICAgIERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KCgkqIHRpbWUuYyBbTElOVVhdIChwcmludF9ydGMpOiBOZXcgZnVuY3Rpb24sIGZvciBwcmludGluZyBydGNfdGltZQoJc3RydWN0dXJlLgoJW0xJTlVYXSAocnRjX2lvY3RsKTogTmV3IGZ1bmN0aW9uLCBmb3IgcGFyc2luZyBSVENfKiBpb2N0bHMuCgkqIGlvY3RsLmMgW0xJTlVYXSAoaW9jdGxfZGVjb2RlKTogQ2FsbCBydGNfaW9jdGwuCgkqIGRlZnMuaCBbTElOVVhdOiBEZWNsYXJlIHJ0Y19pb2N0bC4KCUZpeGVzIFJIIzU4NjA2LgoKMjAwNC0xMC0wNiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGRlc2MuYyBbTElOVVhdIChzeXNfZXBvbGxfY3JlYXRlLCBzeXNfZXBvbGxfY3RsLCBzeXNfZXBvbGxfd2FpdCk6CglOZXcgZnVuY3Rpb25zLgoJKiBsaW51eC9zeXNjYWxsLmg6IERlY2xhcmUgdGhlbS4KCSogbGludXgvc3lzY2FsbGVudC5oOiBVc2UgdGhvc2UgZm9yIGVwb2xsXyogc3lzY2FsbHMuCgkqIGxpbnV4L2FscGhhL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L2hwcGEvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3MzOTAvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvczM5MHgvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvc3BhcmMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvc3BhcmM2NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zcGFyYzY0L3N5c2NhbGxlbnQyLmg6IExpa2V3aXNlLgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCglGaXhlcyBSSCMxMzQ0NjMuCgoJKiByZXNvdXJjZS5jIChyZXNvdXJjZXMpOiBBZGQgUkxJTUlUX0xPQ0tTLCBSTElNSVRfU0lHUEVORElORywKCWFuZCBSTElNSVRfTVNHUVVFVUUsIGlmIGRlZmluZWQuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoJRml4ZXMgUkgjMTMzNTk0LgoKCSogbmV0LmMgW0hBVkVfU0VORE1TR10gKHByaW50Y21zZ2hkcik6IE5ldyBmdW5jdGlvbi4KCShwcmludG1zZ2hkcik6IFVzZSBpdC4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCglGaXhlcyBSSCMxMzE2ODkuCgoJKiBmaWxlLmMgKHNwcmludG1vZGUpOiBBZGQgY29uc3QgdG8gcmV0dXJuIHR5cGUuCgkoc3ByaW50ZnN0eXBlKTogTGlrZXdpc2UuCgkqIHNpZ25hbC5jIChwcmludHNpZ2luZm8pOiBBZGQgYSBjb25zdC4KCjIwMDQtMDktMTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBVc2Ugc3lzX3dhaXRpZC4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogd2FpdGlkIHRha2VzIDUgYXJndW1lbnRzLCBhbmQgaXMgaW4gVFAgY2F0ZWdvcnkuCgkqIHByb2Nlc3MuYyAoc3lzX3dhaXRpZCk6IEhhbmRsZSBmaWZ0aCBhcmd1bWVudCAoc3RydWN0IHJ1c2FnZSAqKS4KCjIwMDQtMDktMTEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiB0aW1lLmMgKHN5c19jbG9ja19uYW5vc2xlZXApOiBQcmludCB6ZXJvIGZsYWdzIGFyZyBjb3JyZWN0bHkuCgkoc3lzX3RpbWVyX3NldHRpbWUpOiBMaWtld2lzZS4KCShwcmludHNpZ2V2ZW50KTogUHJpbnQgc2lnbmFscyBieSBuYW1lIGZvciBTSUdFVl9TSUdOQUwuCgkoc3lzX3RpbWVyX2NyZWF0ZSk6IFByaW50IGNsb2NrIElEIHN5bWJvbGljYWxseS4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCglGaXhlcyBSSCMxMzE0MjAuCgoyMDA0LTA5LTA3ICBNaWNoYWwgTHVkdmlnICA8bWx1ZHZpZ0BzdXNlLmN6PgoKCSogZGVmcy5oIChuaW9jdGxlbnRzMSwgbnNpZ25hbHMyKTogRml4IHR5cG9zIGluIGRlY2xzLgoKMjAwNC0wOS0wMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN5c2NhbGwuYyAocXVhbF9vcHRpb25zKTogQWRkIGNvbnN0IHRvIGRlZm4uCglVcGRhdGUgYWxsIHVzZXMuCgkoY2FsbF9jb3VudCwgZXJyb3JfY291bnQsIHR2X2NvdW50KTogVmFyaWFibGVzIHJlbW92ZWQuCgkoc3RydWN0IGNhbGxfY291bnRzLCBjb3VudHMpOiBOZXcgdHlwZSBhbmQgdmFyaWFibGUuCglVcGRhdGUgYWxsIHVzZXJzIG9mIHRoZSBvbGQgdGhyZWUgdG8gdXNlIHRoZSBuZXcgYXJyYXkgb2Ygc3RydWN0cy4KCSh0cmFjZV9zeXNjYWxsKTogQWxsb2NhdGUgY291bnRzIG9uIGZpcnN0IHVzZS4KCShzb3J0ZWRfY291bnQpOiBWYXJpYWJsZSByZW1vdmVkLgoJKGNhbGxfc3VtbWFyeSk6IEFsbG9jYXRlIGxvY2FsbHkuCgoJKiBzeXNjYWxsLmMgKHN5c2VudDAsIHN5c2VudDEsIHN5c2VudDIsIHN5c2VudCk6IEFkZCBjb25zdCB0byBkZWZuLgoJKG5zeXNjYWxsczAsIG5zeXNjYWxsczEsIG5zeXNjYWxsczIpOiBMaWtld2lzZS4KCShlcnJub2VudDAsIGVycm5vZW50MSwgZXJybm9lbnQyLCBlcnJub2VudCk6IExpa2V3aXNlLgoJKG5lcnJub3MwLCBuZXJybm9zMSwgbmVycm5vczIpOiBMaWtld2lzZS4KCSogc2lnbmFsLmMgKHNpZ25hbGVudDAsIHNpZ25hbGVudDEsIHNpZ25hbGVudDIpOiBMaWtld2lzZS4KCShuc2lnbmFsczAsIG5zaWduYWxzMSwgbnNpZ25hbHMyKTogTGlrZXdpc2UuCgkoc2lnbmFtZSk6IExJa2V3aXNlLgoJKiBpb2N0bC5jIChpb2N0bGVudDAsIGlvY3RsZW50MSwgaW9jdGxlbnQyKTogTGlrZXdpc2UuCgkobmlvY3RsZW50czAsIG5pb2N0bGVudHMxLCBuaW9jdGxlbnRzMik6IExpa2V3aXNlLgoJKGlvY3RsX2xvb2t1cCwgaW9jdGxfbmV4dF9tYXRjaCk6IExpa2V3aXNlLgoJKiBkZWZzLmg6IFVwZGF0ZSBkZWNscy4KCSogaW8uYyAoc3lzX2lvY3RsKTogVXBkYXRlIHVzZXJzLgoKCSogdXRpbC5jICh4bG9va3VwLCBwcmludHh2YWwsIGFkZGZsYWdzLCBwcmludGZsYWdzKTogVXNlIGNvbnN0IGZvcgoJc3RydWN0IHhsYXQgKiBhcmd1bWVudC4KCSogZGVmcy5oICh4bG9va3VwLCBwcmludHh2YWwsIGFkZGZsYWdzLCBwcmludGZsYWdzKTogVXBkYXRlIGRlY2xzLgoJKiBiam0uYzogQWRkIGNvbnN0IHRvIGFsbCBzdHJ1Y3QgeGxhdCBkZWZucy4KCSogZGVzYy5jOiBMaWtld2lzZS4KCSogZmlsZS5jOiBMaWtld2lzZS4KCSogaXBjLmM6IExpa2V3aXNlLgoJKiBtZW0uYzogTGlrZXdpc2UuCgkqIG5ldC5jOiBMaWtld2lzZS4KCSogcHJvYy5jOiBMaWtld2lzZS4KCSogcHJvY2Vzcy5jOiBMaWtld2lzZS4KCSogcmVzb3VyY2UuYzogTGlrZXdpc2UuCgkqIHNpZ25hbC5jOiBMaWtld2lzZS4KCSogc29jay5jOiBMaWtld2lzZS4KCSogc3RyZWFtLmM6IExpa2V3aXNlLgoJKiBzeXN0ZW0uYzogTGlrZXdpc2UuCgkqIHRlcm0uYzogTGlrZXdpc2UuCgkqIHRpbWUuYzogTGlrZXdpc2UuCgkqIHV0aWwuYzogTGlrZXdpc2UuCgoyMDA0LTA5LTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogQWRkIG5ldyBlbnRyaWVzIGZvciB0aW1lcl8qLCBjbG9ja18qLCBhbmQKCW1xXyogc3lzY2FsbHMsIGFuZCBuYW1lcyBvbmx5IGZvciBuZXcgY2FsbHMgdXAgdG8gMjUyLgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IEFkZCB3YWl0aWQuCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zeXNjYWxsLmg6IERlY2xhcmUgc3lzX3dhaXRpZC4KCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfd2FpdCk6IFRha2Ugc2Vjb25kIGFyZyBnaXZpbmcgaW5kZXggb2YgZmxhZ3MKCWFyZ3VtZW50LgoJKiBkZWZzLmg6IFVwZGF0ZSBwcm90b3R5cGUuCgkqIHN5c2NhbGwuYyAoaW50ZXJuYWxfc3lzY2FsbCk6IFVwZGF0ZSBjYWxsZXIuCglBbHNvIHVzZSBpbnRlcm5hbF93YWl0IGZvciBTWVNfd2FpdGlkLgoJKiBwcm9jZXNzLmMgKHN5c193YWl0aWQpOiBEZWZpbmUgZm9yIFtMSU5VWF0gYXMgd2VsbC4KCURvbid0IHR3ZWFrIFRDQl9TVVNQRU5ERUQtLWludGVybmFsX3dhaXQgZG9lcyB0aGF0LgoJKHdhaXRpZF90eXBlcyk6IENvbmRpdGlvbmFsaXplIHVzZSBvZiBub25zdGFuZGFyZCBQXyogbWFjcm9zLgoKMjAwNC0wOC0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjUuNy4KCSogZGViaWFuL2NoYW5nZWxvZzogNC41LjctMS4KCSogc3RyYWNlLnNwZWM6IDQuNS43LTIuCgoJKiBkZWJpYW4vcnVsZXM6IFJld3JpdGUgc3BhcmM2NCBjaGFuZ2Ugb2YgMjAwNC0wNy0xMi4KCUFsd2F5cyBkbyBlYWNoIGJ1aWxkIGluIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5LgoJRml4ZXMgRGViaWFuIGJ1ZyAjMjU0NzI4LgoKCSogdGltZS5jIChjbG9ja25hbWVzKTogVXNlICNpZmRlZiBhcm91bmQgQ0xPQ0tfKiB1c2VzLgoKCSogc3RyYWNlLjE6IFNheSB0aGF0IC1jIHNob3dzIHN5c3RlbSBDUFUgdGltZSwgbm90IHJlYWwgdGltZS4KCUZpeGVzIERlYmlhbiBidWcgIzI1NDQzOC4KCgkqIHN5c2NhbGwuYyAoZHVtcGlvKTogTWF0Y2ggcHJlYWQgYW5kIHB3cml0ZSBzeXN0ZW0gY2FsbHMgdG9vLgoJRml4ZXMgRGViaWFuIGJ1ZyAjMjM5OTQ3LgoKCSogbmV0LmMgKHNvY2tvcHRpb25zKTogQWRkIGFsbCBTT18qIG1hY3JvcyBrbm93biBpbiBMaW51eCAyLjYuOS4KCUZpeGVzIERlYmlhbiBidWcgIzE3MTY1My4KCjIwMDQtMDctMTIgIERtaXRyeSBWLiBMZXZpbiAgPGxkdkBhbHRsaW51eC5vcmc+CgoJKiBzaWduYWwuYyBbTElOVVhdIChwYXJzZV9zaWdzZXRfdCk6IEZpeCBoZXggc3RyaW5ncyBwYXJzZXIuCglGaXhlcyBSSCMxMjgwOTEuCgoyMDA0LTA4LTMwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3RyYWNlLmMgKG1haW4pOiBEb24ndCBjYWxsIGZha2VfZXhlY3ZlIHVuZGVyIC1jLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCUZpeGVzIFJIIzEyOTE2Ni4KCgkqIG5ldC5jIChzb2NraXBvcHRpb25zKTogQWRkIHNvbWUgb3B0aW9ucy4KCVtTT0xfSVBWNl0gKHNvY2tpcHY2b3B0aW9ucyk6IE5ldyB2YXJpYWJsZS4KCShzeXNfZ2V0c29ja29wdCwgcHJpbnRzb2Nrb3B0KTogVXNlIGl0IGZvciBTT0xfSVBWNiBsZXZlbC4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCglGaXhlcyBSSCMxMjgzOTEuCgoJKiB0aW1lLmMgKGNsb2NrbmFtZXMpOiBOZXcgdmFyaWFibGUsIHN5bWJvbGljIG5hbWVzIGZvciBjbG9ja190LgoJKHN5c19jbG9ja19zZXR0aW1lLCBzeXNfY2xvY2tfZ2V0dGltZSwgc3lzX2Nsb2NrX25hbm9zbGVlcCk6IFVzZSBpdC4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCglGaXhlcyBSSCMxMjkzNzguCgoJKiBzeXN0ZW0uYyAocGVyc29uYWxpdHlfb3B0aW9ucyk6IEhhcmQtY29kZSB2YWx1ZXMgaGVyZS4KCURvbid0ICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPiBhdCBhbGwuCglGaXhlcyBSSCMxMzA5NjUgYW5kIERlYmlhbiBidWcgIzQwNTg4LgoKCSogZmlsZS5jIChwcmludF94YXR0cl92YWwpOiBOZXcgZnVuY3Rpb24gdG8gc2hvdyBhdHRyaWJ1dGUgdmFsdWVzLgoJKHN5c19zZXR4YXR0ciwgc3lzX2ZzZXR4YXR0ciwgc3lzX2dldHhhdHRyLCBzeXNfZmdldHhhdHRyKTogVXNlIGl0LgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCUZpeGVzIFJIIzEzMTE3Ny4KCjIwMDQtMDctMTIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC41LjYuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjUuNi0xLgoKCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbGludXgvc3BhcmM2NCBmaWxlcy4KCgkqIGRlYmlhbi9ydWxlczogT24gc3BhcmMtbGludXgsIGJ1aWxkIHN0cmFjZTY0IGFzIHdlbGwuCglGcm9tIEJlbiBDb2xsaW5zIDxiY29sbGluc0BkZWJpYW4ub3JnPi4KCUZpeGVzIERlYmlhbiBidWcgIzI1NDcyOC4KCjIwMDQtMDctMDcgIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQG51dHMuZGF2ZW1sb2Z0Lm5ldD4KCgkqIGxpbnV4L3NwYXJjL3N5c2NhbGxlbnQuaDogU3luYyB3aXRoIHJlYWxpdHkuCgkqIGxpbnV4L3NwYXJjL3N5c2NhbGwuaCAoc3lzX3NlbmRmaWxlNjQsIHN5c19mdXRleCwgc3lzX2dldHRpZCwKCXN5c19zY2hlZF9zZXRhZmZpbml0eSwgc3lzX3NjaGVkX2dldGFmZmluaXR5LCBzeXNfc2V0eGF0dHIsCglzeXNfbHNldHhhdHRyLCBzeXNfZnNldHhhdHRyLCBzeXNfZ2V0eGF0dHIsIHN5c19sZ2V0eGF0dHIsCglzeXNfZmdldHhhdHRyLCBzeXNfbGlzdHhhdHRyLCBzeXNfbGxpc3R4YXR0ciwgc3lzX2ZsaXN0eGF0dHIsCglzeXNfcmVtb3ZleGF0dHIsIHN5c19scmVtb3ZleGF0dHIsIHN5c19mcmVtb3ZleGF0dHIsCglzeXNfcmVtYXBfZmlsZV9wYWdlcywgc3lzX3JlYWRhaGVhZCwgc3lzX3Rna2lsbCwgc3lzX3N0YXRmczY0LAoJc3lzX2ZzdGF0ZnM2NCwgc3lzX2Nsb2NrX3NldHRpbWUsIHN5c19jbG9ja19nZXR0aW1lLAoJc3lzX2Nsb2NrX2dldHJlcywgc3lzX2Nsb2NrX25hbm9zbGVlcCwgc3lzX3RpbWVyX2NyZWF0ZSwKCXN5c190aW1lcl9zZXR0aW1lLCBzeXNfdGltZXJfZ2V0dGltZSk6IE5ldyBkZWNsYXJhdGlvbnMuCgkqIGxpbnV4L3NwYXJjNjQvZHVtbXkyLmgsIGxpbnV4L3NwYXJjNjQvc3lzY2FsbGVudDIuaCwKCWxpbnV4L3NwYXJjNjQvc3lzY2FsbC5oLCBsaW51eC9zcGFyYzY0L2Vycm5vZW50LmgsCglsaW51eC9zcGFyYzY0L2Vycm5vZW50MS5oLCBsaW51eC9zcGFyYzY0L2Vycm5vZW50Mi5oLAoJbGludXgvc3BhcmM2NC9pb2N0bGVudC5oLCBsaW51eC9zcGFyYzY0L2lvY3RsZW50MS5oLAoJbGludXgvc3BhcmM2NC9pb2N0bGVudDIuaCwgbGludXgvc3BhcmM2NC9zaWduYWxlbnQuaCwKCWxpbnV4L3NwYXJjNjQvc2lnbmFsZW50LmgsIGxpbnV4L3NwYXJjNjQvc2lnbmFsZW50LmgsCglsaW51eC9zcGFyYzY0L3NpZ25hbGVudDEuaCwgbGludXgvc3BhcmM2NC9zaWduYWxlbnQyLmgsCglsaW51eC9zcGFyYzY0L3N5c2NhbGwxLmgsIGxpbnV4L3NwYXJjNjQvc3lzY2FsbGVudC5oLAoJbGludXgvc3BhcmM2NC9zeXNjYWxsZW50MS5oOiBOZXcgZmlsZXMuCgkqIGRlZnMuaCAoTElOVVhTUEFSQyk6IERlZmluZSBhbHNvIHdoZW4gU1BBUkM2NC4KCShMSU5VWCAmJiBTUEFSQzY0KTogU2V0IFNVUFBPUlRFRF9QRVJTT05BTElUSUVTIHRvIDMuCglJZ25vcmUgU0lHVFJBUCBhZnRlciBleGVjdmUgYnkgZGVmaW5pbmcgVENCX1dBSVRFWEVDVkUuCglEZWZpbmUgcG9zc2libHkgbWlzc2luZyBfX05SX2V4aXRfZ3JvdXAuICBEZWNsYXJlIGdldHJ2YWwyLgoJKiBjb25maWd1cmUuYWMgKHNwYXJjNjQpOiBOZXcgYXJjaGl0ZWN0dXJlIGNhc2UuCgkqIGZpbGUuYyAoc3RhdF9zcGFyYzY0KTogTmV3IHN0cnVjdHVyZS4KCShwcmludHN0YXRfc3BhcmM2NCk6IE5ldyBvdXRwdXQgcm91dGluZSBmb3IgdGhhdC4KCShwcmludHN0YXQpOiBDYWxsIGl0LCBpZiBwZXJzb25hbGl0eSBpcyAyLgoJKHByaW50c3RhdDY0KTogTGlrZXdpc2UuCgkqIHV0aWwuYzogQ29uZGl0aW9uYWxpemUgcHRyYWNlIGRlZmluZXMgb24gTElOVVhTUEFSQwoJbm90IExJTlVYICYmIFNQQVJDLgoJKFNQQVJDNjQgJiYgTElOVVgpOiBEZWZpbmUgcl9wYyB0byByX3RwYywgYW5kIFBUUkFDRV9GT09SRUdTCgl0byBQVFJBQ0VfRk9PUkVHUzY0IHNvIHRoYXQgbW9yZSBzcGFyYyBjb2RlIGNhbiBiZSBzaGFyZWQKCWJldHdlZW4gNjQtYml0IGFuZCAzMi1iaXQuCgkoX2hhY2tfc3lzY2FsbDUpOiBDb3JyZWN0IHRyYXAgbnVtYmVyIHdoZW4gU1BBUkM2NC4KCShQVFJBQ0VfV1JJVEV7VEVYVCxEQVRBfSk6IEFkZCBTUEFSQzY0IHRvIGlmZGVmIGd1YXJkLgoJKGdldHBjKTogSGFuZGxlIFNQQVJDNjQgJiYgTElOVVguCgkocHJpbnRjYWxsKTogTGlrZXdpc2UuCgkoYXJnIGZldGNoaW5nL3NldHRpbmcpOiBVc2Ugc2FtZSBjb2RlIGZvciBTUEFSQzY0IExJTlVYCglhcyBmb3IgU1BBUkMuCgkoc2V0YnB0KTogSGFuZGxlIFNQQVJDNjQgJiYgTElOVVguCgkoY2xlYXJicHQpOiBMaWtld2lzZS4KCSogc2lnbmFsLmM6IENvbmRpdGlvbmFsaXplIHB0cmFjZSBkZWZpbmVzIG9uIFNQQVJDIGFuZAoJU1BBUkM2NC4KCShTUEFSQzY0ICYmIExJTlVYKTogRGVmaW5lIHJfcGMgdG8gcl90cGMsIGFuZCBQVFJBQ0VfRk9PUkVHUwoJdG8gUFRSQUNFX0ZPT1JFR1M2NCBzbyB0aGF0IG1vcmUgc3BhcmMgY29kZSBjYW4gYmUgc2hhcmVkCgliZXR3ZWVuIDY0LWJpdCBhbmQgMzItYml0LgoJKG1fc2lnaW5mbyk6IFVzZSBzYW1lIGRlZmluaXRpb24gb24gU1BBUkM2NCBhcyBTUEFSQy4KCShzeXNfc2lncmV0dXJuKTogSGFuZGxlIExJTlVYICYmIFNQQVJDNjQuCgkqIHN5c2NhbGwuYzogQ29uZGl0aW9uYWxpemUgcHRyYWNlIGRlZmluZXMgb24gU1BBUkMgYW5kCglTUEFSQzY0LgoJKFNQQVJDNjQgJiYgTElOVVgpOiBEZWZpbmUgcl9wYyB0byByX3RwYywgYW5kIFBUUkFDRV9GT09SRUdTCgl0byBQVFJBQ0VfRk9PUkVHUzY0IHNvIHRoYXQgbW9yZSBzcGFyYyBjb2RlIGNhbiBiZSBzaGFyZWQKCWJldHdlZW4gNjQtYml0IGFuZCAzMi1iaXQuCgkoZ2V0c2Nubyk6IFVzZSBzYW1lIHN0YXRpYyBzdGF0ZSBvbiBTUEFSQzY0IGFzIFNQQVJDLAoJYW5kIGFkZCBTUEFSQzY0IGhhbmRsaW5nLgoJKGdldF9lcnJvcik6IEhhbmRsZSBMSU5VWCAmJiBTUEFSQzY0LgoJKGZvcmNlX3Jlc3VsdCk6IExpa2V3aXNlLgoJKHN5c2NhbGxfZW50ZXIpOiBMaWtld2lzZS4KCSh0cmFjZV9zeXNjYWxsKTogSGFuZGxlIHN5c19zb2NrZXRjYWxsIGFuZCBzeXNfaXBjIG9uIFNQQVJDNjQKCWp1c3QgbGlrZSBTUEFSQy4KCShnZXRydmFsMik6IEhhbmRsZSBMSU5VWCAmJiBTUEFSQzY0LgoJKiBwcm9jZXNzLmM6IENvbmRpdGlvbmFsaXplIHB0cmFjZSBkZWZpbmVzIG9uIFNQQVJDIGFuZAoJU1BBUkM2NC4KCShTUEFSQzY0ICYmIExJTlVYKTogRGVmaW5lIHJfcGMgdG8gcl90cGMsIGFuZCBQVFJBQ0VfRk9PUkVHUwoJdG8gUFRSQUNFX0ZPT1JFR1M2NCBzbyB0aGF0IG1vcmUgc3BhcmMgY29kZSBjYW4gYmUgc2hhcmVkCgliZXR3ZWVuIDY0LWJpdCBhbmQgMzItYml0LgoJKGNoYW5nZV9zeXNjYWxsKTogSGFuZGxlIExJTlVYICYmIFNQQVJDNjQuCgkoc3RydWN0X3VzZXJfb2Zmc2V0cyk6IElmZGVmIG91dCB0aG9zZSB3aGljaCBkbyBub3QgZXhpc3QKCW9uIFNQQVJDNjQuCgkqIG5ldC5jIChzeXNfcGlwZSk6IEhhbmRsZSBMSU5VWCAmJiBTUEFSQzY0LgoJKiBpb2N0bC5jOiBGaXggaW5pdGlhbGl6ZXIgdHlwbyBmb3IgbmlvY3RsZW50czIsIHdhcwoJbmlvY3RsZW50czEgYnkgYWNjaWRlbnQuCgoyMDA0LTA2LTI4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgoKCSogcHJvY2Vzcy5jIChpbnRlcm5hbF9leGVjKTogTW92ZSBUQ0JfV0FJVEVYRUNWRSBoYW5kbGluZyBoZXJlLgoJKHN5c19leGVjdmUpOiBSZW1vdmUgaXQgaGVyZS4KCjIwMDQtMDctMTIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBsaW51eC9zaDY0L3N5c2NhbGxlbnQuaC4KCgkqIGRlYmlhbi9jb250cm9sIChTZWN0aW9uKTogTW92ZSB0byB1dGlscywgbWF0Y2hpbmcgRGViaWFuIG92ZXJyaWRlLgoKCSogbmV0LmMgKGFkZHJmYW1zKTogTWFrZSB2YXJpYWJsZSBnbG9iYWwuCgkqIHNvY2suYyAoc29ja19pb2N0bCk6IERlY29kZSB0aGUgYXJndW1lbnRzIGZvciBTSU9DR0lGTkFNRSwKCVNJT0NHSUZJTkRFWCwgYW5kIFNJT0NHSUZDT05GLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCUZpeGVzIFJIIzEyNjkxNy4KCgkqIGxpbnV4L2lvY3Rsc29ydC5jOiBBZGQgc29tZSAjaW5jbHVkZXMuCglbUE9XRVJQQ106IEtsdWRnZSBvdXQgaGlnaCBiaXRzLgoJKiBsaW51eC9pYTY0L2lvY3RsZW50Lmg6IFJlZ2VuZXJhdGVkIHVzaW5nIFJIRUwzIGhlYWRlcnMuCgkqIGxpbnV4L3Bvd2VycGMvaW9jdGxlbnQuaDogTGlrZXdpc2UuCgoyMDA0LTA3LTExICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvaW9jdGxlbnQuc2g6IFJlcGxhY2UgYXNtIHdpdGggJGFzbSBpbiBhbGwgcGxhY2VzLgoKCSogY29uZmlndXJlLmFjOiBBZGQgSTM4NiBhcyBBTV9DT05ESVRJT05BTC4KCSogTWFrZWZpbGUuYW0gW0xJTlVYXTogQWRkIG1haW50YWluZXItbW9kZSBydWxlcyB0byByZWdlbmVyYXRlCgl0aGUgaW9jdGxlbnQuaCBmaWxlLgoKMjAwNC0wNy0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHJlc291cmNlLmMgKHN5c19xdW90YWN0bCk6IFRydW5jYXRlIGZpcnN0IGFyZ3VtZW50IHRvIDMyIGJpdHMsIHNpbmNlCgl0aGF0J3Mgd2hhdCB0aGUga2VybmVsIHdpbGwgZG8uCgoyMDA0LTA3LTA3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvaW9jdGxlbnQuc2g6IFRha2Ugb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIHVzZSBhcyBkaXJlY3RvcnkKCW5hbWUgaW4gcGxhY2Ugb2YgYGFzbScuCgoyMDA0LTA2LTI3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNS41LgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC41LjUtMS4KCjIwMDQtMDYtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXNjYWxsLmMgKHN5c2NhbGxfZml4dXApIFtMSU5VWCAmJiBYODZfNjRdOiBGb3IgMzItYml0IHByb2Nlc3MsCglzaWduIGV4dGVuZCB0aGUgbG93IDMyIGJpdHMgb2YgUkFYIHRvIDY0IGJpdHMuCglGaXhlcyBSSCMxMjY1NDcuCgoJKiBzeXNjYWxsLmMgKGZvcmNlX3Jlc3VsdCk6IFtMSU5VWCAmJiBYODZfNjRdOiBGaXggUkFYKjQgLT4gUkFYKjguCgoyMDA0LTA2LTAzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNS40LgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC41LjQtMS4KCgkqIG5ldC5jIChkb21haW5zKTogQWRkIG1hbnkgUEZfKiB2YWx1ZXMgI2lmZGVmIFBGXyouCgkoYWRkcmZhbXMpOiBBZGQgbWFueSBBRl8qIHZhbHVlcyAjaWZkZWYgQUZfKi4KCUZpeGVzIERlYmlhbiBidWcgIzI1MDUwNi4KCjIwMDQtMDUtMDIgIERtaXRyeSBWLiBMZXZpbiAgPGxkdkBhbHRsaW51eC5vcmc+CgoJKiBsaW51eC9pb2N0bHNvcnQuYyAoY29tcGFyZSk6IFdoZW4gaW9jdGwgY29kZXMgZXF1YWwsIGNvbXBhcmUKCW5hbWVzLgoJKG1haW4pOiBQcmludCBhIG5vdGUgdGhhdCBwcm9ncmFtIG91dHB1dCBpcyBnZW5lcmF0ZWQgYnkKCWlvY3Rsc29ydC4KCSogbGludXgvaW9jdGxlbnQuc2g6IEJ1aWxkIHRoZSBsaXN0IG9mIGlvY3RscyBkZWZpbmVkIGluCglsaW51eC9mYi5oICgweDQ2Li4pLCBsaW51eC9rZC5oICgweDRCLi4pLCBsaW51eC9jZHJvbS5oICgweDUzLi4pLAoJYXNtL2lvY3Rscy5oICgweDU0Li4pLCBsaW51eC92dC5oICgweDU2Li4pLCBsaW51eC92aWRlb3RleHQuaAoJKDB4NzEuLiksIGxpbnV4L3ZpZGVvdGV4dC5oICgweDcyLi4pLCBhc20vc29ja2lvcy5oICgweDg5Li4pLAoJbGludXgvc29ja2lvcy5oICgweDg5Li4pLCBsaW51eC93aXJlbGVzcy5oICgweDhCLi4pLgoJKiBsaW51eC9pb2N0bGVudC5oOiBSZWdlbmVyYXRlZCBmcm9tIGxpbnV4LTIuNi41LgoJRml4ZXMgUkgjMTIyMjU3LgoKMjAwNC0wNi0wMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGRlYmlhbi9jb250cm9sIChBcmNoaXRlY3R1cmUpOiBBZGQgYW1kNjQuCglGaXhlcyBEZWJpYW4gYnVnICMyNDY1NjguCgoJKiBzdHJhY2UuYyAobWFpbikgW0xJTlVYXTogRXhwYW5kIFRDQlRBQiBhcyBuZWNlc3NhcnkgZm9yIHRocmVhZHMKCWF0dGFjaGVkLiAgQXR0YWNoIHRocmVhZHMgb25seSB1bmRlciAtZi4gIFNldCBUQ0JfRk9MTE9XRk9SSyBpbiB0aGVtLgoJKGV4cGFuZF90Y2J0YWIpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YgLi4uCgkqIHByb2Nlc3MuYyAoZm9ya190Y2IpOiAuLi4gaGVyZSwgY2FsbCB0aGF0LgoJKiBkZWZzLmg6IERlY2xhcmUgZXhwYW5kX3RjYnRhYi4KCjIwMDQtMDQtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBwcm9jZXNzLmMgKHByaW50c3RhdHVzKTogQWRkIGEgc3BhY2UgYmVmb3JlIHwgaW4gb3V0cHV0LgoKMjAwNC0wNC0xNiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYzogVmVyc2lvbiA0LjUuMy4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNS4zLTEuCgoyMDA0LTAzLTE4ICBEbWl0cnkgVi4gTGV2aW4gIDxsZHZAYWx0bGludXgub3JnPgoKCSogcmVzb3VyY2UuYyAoc3lzX3F1b3RhY3RsKSBbTElOVVhdOiBDYXN0IGFyaXRobWV0aWMgc2hpZnQgb3BlcmFuZAoJZnJvbSBsb25nIHRvIHVuc2lnbmVkIGxvbmcsIHRvIGZpeCBvdXRwdXQgb2YgdGhlIHF1b3RhY3RsIGNvbW1hbmQKCXBhcnNlci4KCUZpeGVzIFJIIzExODY5NC4KCjIwMDQtMDQtMTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC9zMzkwL2lvY3RsZW50LmgsIGxpbnV4L3MzOTB4L2lvY3RsZW50Lmg6IFVwZGF0ZSBEQVNEIGlvY3Rscy4KCUZyb20gTWF4aW0gU2hjaGV0eW5pbiA8bWF4aW1AZGUuaWJtLmNvbT4uCgoJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciA8bXF1ZXVlLmg+LgoJKiBpcGMuYyAoc3lzX21xX29wZW4sIHByaW50bXFhdHRyKSBbISBIQVZFX01RVUVVRV9IXTogRG9uJ3QgdHJ5IHRvCglkZWNvZGUgc3RydWN0IG1xX2F0dHIuCgkqIE5FV1M6IE1lbnRpb24gbXEgc3VwcG9ydC4KCgkqIGxpbnV4L3N5c2NhbGwuaDogU3VwcG9ydCBuZXcgbXFfKiBzeXNjYWxscyBvbiBMaW51eC4KCSogbGludXgvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvZHVtbXkuaDogTGlrZXdpc2UuCgkqIGlwYy5jOiBMaWtld2lzZS4KCSogdGltZS5jIChwcmludHNpZ2V2ZW50KTogSGFuZGxlIFNJR0VWX1RIUkVBRC4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCglGaXhlcyBSSCMxMjA3MDEuCgoyMDA0LTA0LTEzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbmV0LmMgKG1zZ19mbGFncyk6IEdyb2sgTVNHX0ZJWCwgTVNHX1NZTiwgTVNHX1JTVCwgTVNHX05PU0lHTkFMLAoJTVNHX01PUkUuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoJRml4ZXMgUkgjMTIwNTQxLgoKCSogcHJvY2Vzcy5jIChwcmludHN0YXR1cyk6IE1hc2sgb3V0IGJpdHMgcHJlc2VudGVkIHN5bWJvbGljYWxseSwgYW5kCglwcmludCAifCAweG5ubiIgaWYgdGhlIHJlbWFpbmluZyBiaXRzIGFyZSBub3QgYWxsIHplcm8uCglGaXhlcyBEZWJpYW4gYnVnICMyNDAwNjIuCgoJKiBwcm9jZXNzLmMgKHByaW50X2FmZmluaXR5bGlzdCk6IFJld3JpdHRlbiB0byBoYW5kbGUgaW5kaXJlY3QgdmFsdWVzLgoJKHN5c19zY2hlZF9zZXRhZmZpbml0eSwgc3lzX3NjaGVkX2dldGFmZmluaXR5KTogVXBkYXRlIGNhbGxlcnMuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoJRml4ZXMgUkgjMTE4Njg1LgoKCSogYWNpbmNsdWRlLm00OiBRdW90ZSBmaXJzdCBhcmd1bWVudCB0byBBQ19ERUZVTiBpbiBhbGwgY2FzZXMuCgoyMDA0LTA0LTA4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3RyYWNlLmMgKG1haW4pIFtMSU5VWF06IFdoZW4gYXR0YWNoaW5nIGZvciAtcCwgbG9vayBpbgoJL3Byb2MvUElEL3Rhc2sgZm9yIGFsbCB0aHJlYWRzIGFuZCBhdHRhY2ggdGhlbSBhcyBwcmVzdW1lZAoJQ0xPTkVfVEhSRUFEIGNoaWxkcmVuLgoJKiBORVdTOiBNZW50aW9uIHRoZSBmZWF0dXJlLgoJRml4ZXMgUkgjMTIwNDYyLgoKMjAwNC0wMy0wMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHV0aWwuYyAoc2V0YnB0KTogRml4IG9uZSBtaXNzZWQgc3BvdCB0byB1c2UgbmV3IGFyZzBfaW5kZXggbWFjcm8uCglGcm9tIE1pY2hhZWwgSG9semhldSA8SE9MWkhFVUBkZS5pYm0uY29tPi4KCgkqIGRlYmlhbi9jb250cm9sIChTdGFuZGFyZHMtVmVyc2lvbik6IFVwZGF0ZSB0byAzLjYuMS4KCjIwMDQtMDMtMDEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC41LjIuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjUuMi0xLgoKCSogc3RyYWNlLmMgKG1haW4pOiBBdm9pZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJydW5zIGZyb20gbHVkaWNyb3VzCglhcmd1bWVudHMgb3IgUEFUSCB2YWx1ZXMuCgkqIHN5c2NhbGwuYyAocXVhbF9zaWduYWwpOiBCYWlsIG91dCBmb3IgdG9vLWxvbmcgc3RyaW5nLgoKCSogbWVtLmMgW0xJTlVYXTogPGFzbS9tbWFuLmg+IC0+IDxsaW51eC9tbWFuLmg+CglGaXhlcyBEZWJpYW4gYnVnICMyMjMyMDcuCgoJKiBsaW51eC9zcGFyYy9zeXNjYWxsLmg6IENvcHkgbGludXgvc3lzY2FsbC5oIGRlY2xzIG9mIHN5c19zY2hlZF8qLgoKCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgYHN0cnVjdCB1c2VyX2Rlc2MnIGluIDxhc20vbGR0Lmg+LgoJKiBwcm9jZXNzLmMgW0hBVkVfU1RSVUNUX1VTRVJfREVTQ106IFVzZSBzdHJ1Y3QgdXNlcl9kZXNjIGluIHBsYWNlIG9mCglzdHJ1Y3QgbW9kaWZ5X2xkdF9sZHRfcy4KCSogbWVtLmMgW0hBVkVfU1RSVUNUX1VTRVJfREVTQ106IExpa2V3aXNlLgoKCSogc3lzdGVtLmMgKHN5c2N0bF92bSk6IENvbmRpdGlvbmFsaXplIFZNXyogbWFjcm8gdXNlcywgYWRkIHNvbWUgbW9yZS4KCUZyb20gVGltIFlhbWluIDxwbGFzbWFyb29AZ2VudG9vLm9yZz4uCgoJKiBwcm9jZXNzLmMgKHN5c19leGVjdmUpOiBDbGVhciBpbnN0ZWFkIG9mIHNldCBUQ0JfV0FJVEVYRUNWRSBvbgoJZXJyaW5nIHN5c2NhbGwuCgoJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBgc3RydWN0IHB0X2FsbF91c2VyX3JlZ3MnCglhbmQgYHN0cnVjdCBpYTY0X2ZwcmVnJyBpbiA8c3lzL3B0cmFjZS5oPi4KCSogdXRpbC5jLCBwcm9jZXNzLmMsIHN5c2NhbGwuYywgc2lnbmFsLmM6IFdvcmsgYXJvdW5kIGNvbmZsaWN0cyBiZXR3ZWVuCgk8c3lzL3B0cmFjZS5oPiBhbmQgPGxpbnV4L3B0cmFjZS5oPiBmb3IgZGVmaW5pbmcgdGhvc2UgdHlwZXMuCgoJKiBwcm9jZXNzLmMgKHN0cnVjdF91c2VyX29mZnNldHMpIFtMSU5VWCAmJiBJQTY0XTogQ29uZGl0aW9uYWxpemUKCVBUX0FSX0NTRCBhbmQgUFRfQVJfU1NEIHVzZXMgaW4gY2FzZSBvZiBvbGRlciBrZXJuZWwgaGVhZGVycy4KCgkqIHV0aWwuYyBbTElOVVhdIChhcmcwX2luZGV4LCBhcmcxX2luZGV4KTogTmV3IG1hY3Jvcy4KCVtTMzkwIHx8IFMzOTBYXTogRGVmaW5lIHRoZW0gd2l0aCBpbnZlcnRlZCB2YWx1ZXMuCgkoc2V0YnB0KTogVXNlIHRoZW0gZm9yIHVfYXJnIGluZGljZXMuCgoyMDA0LTAyLTI2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgoKCSogZGVmcy5oIFtMSU5VWCAmJiBJQTY0XTogRGVjbGFyZSBnZXRydmFsMiBhbHNvIG9uIElBNjQuCgkqIG5ldC5jIChzeXNfcGlwZSkgW0xJTlVYICYmIElBNjRdOiBGb3IgSUE2NCB1c2UgdGhlIHR3byByZXR1cm4gdmFsdWVzLgoJKiBzeXNjYWxsLmMgKGdldHJ2YWwyKSBbTElOVVggJiYgSUE2NF06IEltcGxlbWVudCBmb3IgSUE2NC4KCjIwMDQtMDMtMDEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC9kdW1teS5oIChzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyLCBzeXNfc2NoZWRfc2V0cGFyYW0sCglzeXNfc2NoZWRfZ2V0cGFyYW0sIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIsIHN5c19zY2hlZF9nZXRzY2hlZHVsZXIsCglzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4pOiBSZW1vdmUgbWFjcm9zLgoJKiBwcm9jZXNzLmMgW0xJTlVYXSAoc3lzX3NjaGVkX2dldHNjaGVkdWxlciwgc3lzX3NjaGVkX3NldHBhcmFtLAoJc3lzX3NjaGVkX2dldHBhcmFtLCBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyLCBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyLAoJc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4pOiBOZXcgZnVuY3Rpb25zLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCUZpeGVzIFJIIzExNjk5MC4KCjIwMDQtMDItMjAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC9ocHBhL3N5c2NhbGxlbnQuaDogVXBkYXRlIHNvbWUgc3lzY2FsbHMuCglGcm9tIFJhbmRvbHBoIENodW5nIDx0YXVzcUBkZWJpYW4ub3JnPi4KCUZpeGVzIERlYmlhbiBidWcgIzIzMTYzMi4KCjIwMDMtMTItMzEgIERhdmlkIE1vc2JlcmdlciAgPGRhdmlkbUBocGwuaHAuY29tPgoKCSogcHJvY2Vzcy5jIChpbnRlcm5hbF9leGl0KTogRm9yIGlhNjQsIGFsc28gcmVjb2duaXplIElBLTMyIDI1MgoJYXMgZXhpdF9ncm91cCgpLgoJKGNoYW5nZV9zeXNjYWxsKTogRm9yIElBNjQsIGFsc28gc3VwcG9ydCBjaGFuZ2luZyBJQS0zMiBzeXNjYWxscy4KCSogc3lzY2FsbC5jIChpbnRlcm5hbF9zeXNjYWxsKTogRm9yIElBNjQsIGFsc28gcmVjb2duaXplIElBLTMyCiAgICAgICAgc3lzY2FsbCAyNTIgKGV4aXRfZ3JvdXApIGFzIGFuIGludGVybmFsX2V4aXQoKSBzeXNjYWxsLgoJKiB1dGlsLmMgKFNZU19mb3JrKTogRm9yIElBNjQsIGRlZmluZSB0aGVtIHRvIHRoZSBJQS0zMiBzeXNjYWxsCgludW1iZXIuCgkoU1lTX3Zmb3JrKTogTGlrZXdpc2UuCgkoYXJnX3NldHVwKTogRm9yIElBNjQgdmVyc2lvbiwgYWxzbyBzdXBwb3J0IElBLTMyIHN5c2NhbGxzLgoJKGdldF9hcmcwKTogTGlrZXdpc2UuCgkoZ2V0X2FyZzEpOiBMaWtld2lzZS4KCShzZXRfYXJnMCk6IExpa2V3aXNlLgoJKHNldF9hcmcxKTogTGlrZXdpc2UuCgoyMDA0LTAyLTE1ICBBbnRvbiBCbGFuY2hhcmQgIDxhbnRvbkBzYW1iYS5vcmc+CgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogQWRkIHJ0YXMgY2FsbC4KCVNoaWZ0IG11bHRpcGxleGVkIHN5c2NhbGxzIHRvIHN0YXJ0IGF0IDMwMCwgd2UgYXJlIGFscmVhZHkgYWJvdXQKCXRvIGhpdCAyNTYgcmVhbCBzeXNjYWxscy4KCSogbGludXgvc3lzY2FsbC5oOiBTWVNfc29ja2V0X3N1YmNhbGwgaXMgbm93IDMwMCBmb3IgW1BPV0VSUENdLgoKMjAwNC0wMi0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS5jIChtYWluKTogVXNlIFRDUC0+cGlkLCBub3QgUElELCBpbiAtcCBtZXNzYWdlLgoJRml4ZXMgRGViaWFuIGJ1ZyAjMjI5ODAyLgoKMjAwNC0wMS0xMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN5c2NhbGwuYyAoZm9yY2VfcmVzdWx0KSBbTElOVVhdIFtTMzkwIHx8IFMzOTBYXTogUmVtb3ZlIGJvZ3VzIHVwZWVrCgljYWxsLgoKCSogc3RyZWFtLmMgKGludGVybmFsX3N0cmVhbV9pb2N0bCk6IEZpeCB0eXBvIHN0cmljdCAtPiBzdHJ1Y3QuCglSZXBvcnRlZCBieSBQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQGh1bmdyeS5jb20+LgoKMjAwMy0xMi0zMSAgRGF2aWQgTW9zYmVyZ2VyICA8ZGF2aWRtQGhwbC5ocC5jb20+CgoJKiBwcm9jZXNzLmMgKHN0cnVjdF91c2VyX29mZnNldHMpIFtJQTY0XTogRml4IHVwIHJlZ2lzdGVyIG5hbWUgbGlzdC4KCjIwMDMtMTItMTQgIEFudG9uIEJsYW5jaGFyZCAgPGFudG9uQHNhbWJhLm9yZz4KCgkqIGZpbGUuYyAoc3lzX2dldGRlbnRzNjQpOiBEb24ndCBjYXN0IGRfaW5vIGFuZCBkX29mZiB0byB1bnNpZ25lZCBsb25nLgoJVXNlICVsbHUgZm9ybWF0cyBmb3IgdGhlbS4KCgkqIGZpbGUuYyBbTElOVVhdIChmc21hZ2ljKTogQWRkIFNZU0ZTX01BR0lDLgoKCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IFVwZGF0ZSB0byBpbmNsdWRlIHJlY2VudGx5IGFkZGVkCglzeXNjYWxscy4KCgkqIHN5c2NhbGwuYyAoZ2V0X2Vycm9yKSBbUE9XRVJQQ106IENhc3QgcmVzdWx0IHRvIHVuc2lnbmVkIGxvbmcgZm9yCglwcGM2NCwgd2Ugd2VyZSBtaXNyZXBvcnRpbmcgc3lzY2FsbHMgdGhhdCByZWFsbHkgc3VjY2VlZGVkIGFzIGhhdmluZwoJZmFpbGVkLgoKMjAwNC0wMS0xMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS4xOiBSZW1vdmUgY29tbWVudCBhYm91dCB2Zm9yayBvbiBMaW51eC4KCUZpeGVzIERlYmlhbiBidWcgIzIyMzM5MC4KCgkqIGZpbGUuYyAoZGlyZW50dHlwZXMpOiBEZWZpbmUgdW5kZXIgW0xJTlVYXSBhcyB3ZWxsLiAgQWRkIERUX1VOS05PV04uCgkoc3lzX2dldGRlbnRzNjQpIFtMSU5VWF06IFByaW50IGRfdHlwZSBmaWVsZC4KCjIwMDMtMTItMTUgIERtaXRyeSBWLiBMZXZpbiAgPGxkdkBhbHRsaW51eC5vcmc+CgoJKiBzdHJhY2UuYyAodHJhY2UpIFtXQ09SRURVTVBdOiBTaG93IGNvcmVkdW1wIHN0YXR1cyBvZiB0aGUKCWtpbGxlZCBwcm9jZXNzIGlmIGF2YWlsYWJsZS4gIEZpeGVzIFJIIzExMjExNy4KCjIwMDMtMTEtMTMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC41LjEuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjUuMS0xLgoKMjAwMy0wOS0wNiAgRG1pdHJ5IFYuIExldmluICA8bGR2QGFsdGxpbnV4Lm9yZz4KCgkqIGRlZnMuaCAoaW9jdGxfbG9va3VwKTogUHJvdG90eXBlIGNoYW5nZS4KCSogaW9jdGwuYyAoaW9jdGxfbmV4dF9tYXRjaCk6IE5ldyBmdW5jdGlvbi4KCSogZGVmcy5oOiBEZWNsYXJlIGl0LgoJKiBpby5jIChzeXNfaW9jdGwpOiBVc2UgaXQsIHRvIGRpc3BsYXkgYWxsIHBvc3NpYmxlIGlvY3RsIG5hbWVzCgl3aGVuIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBtYXRjaC4KCSogaW9jdGwuYyAoaW9jdGxfbG9va3VwKTogTGlrZXdpc2UuCgkqIHN0cmVhbS5jIChpbnRlcm5hbF9zdHJlYW1faW9jdGwpOiBMaWtld2lzZS4KCVBhdGNoIGZyb20gU29sYXIgRGVzaWduZXIgPHNvbGFyQG9wZW53YWxsLmNvbT4uCgoyMDAzLTExLTEzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvc2gvc3lzY2FsbGVudC5oOiBVc2Ugc3lzX3NldGdyb3VwczMyLCBzeXNfZ2V0Z3JvdXBzMzIuCgkqIGxpbnV4L3NoNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCjIwMDMtMDktMDYgIERtaXRyeSBWLiBMZXZpbiAgPGxkdkBhbHRsaW51eC5vcmc+CgoJRml4ZXMgZm9yIFJIIzEwNTM1OS4KCSogdXRpbC5jIChwcmludHVpZCk6IE5ldyBmdW5jdGlvbi4KCSogZGVmcy5oOiBEZWNsYXJlIGl0LgoJKiBmaWxlLmMgKHN5c19jaG93bik6IFVzZSBpdC4KCSogZmlsZS5jIChzeXNfZmNob3duKTogTGlrZXdpc2UuCgkqIHByb2Nlc3MuYyAoc3lzX3NldHJldWlkLCBzeXNfc2V0cmVnaWQsIHN5c19zZXRyZXN1aWQsCglzeXNfc2V0cmVzZ2lkKTogTGlrZXdpc2UuCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogQmV0dGVyIGhhbmRsZSBnZXRnaWQzMiwgZ2V0ZXVpZDMyLCBnZXRlZ2lkMzIsCglzZXRyZXVpZDMyLCBzZXRyZWdpZDMyLCBnZXRncm91cHMzMiwgc2V0Z3JvdXBzMzIsIGZjaG93bjMyLAoJc2V0cmVzdWlkMzIsIGdldHJlc3VpZDMyLCBzZXRyZXNnaWQzMiwgZ2V0cmVzZ2lkMzIsIGNob3duMzIsCglzZXR1aWQzMiwgc2V0Z2lkMzIsIHNldGZzdWlkMzIsIHNldGZzZ2lkMzIuCgkqIHByb2Nlc3MuYyBbTElOVVhdOiBEZWZpbmUgR0VUR1JPVVBTMzJfVC4KCSogcHJvY2Vzcy5jIFtMSU5VWF0gKHN5c19zZXRncm91cHMzMiwgc3lzX2dldGdyb3VwczMyKToKCU5ldyBmdW5jdGlvbnMuCgkqIGxpbnV4L3N5c2NhbGwuaCAoc3lzX3NldGdyb3VwczMyLCBzeXNfZ2V0Z3JvdXBzMzIpOgoJRGVjbGFyZSB0aGVtLgoKMjAwMy0xMS0xMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS5jIChtYWluKTogQmFpbCB3aXRoIHVzYWdlIGVycm9yIGZvciBtaXNzaW5nIGNvbW1hbmQgYmVmb3JlIHdlCglvcGVuIHRoZSAtbyBmaWxlIG9yIGZpZGRsZSB1aWRzLgoKMjAwMy0xMS0wNiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS5jIChtYWluKTogVHJlYXQgcGlwZWQgb3V0cHV0IG1vcmUgbGlrZSBmaWxlIG91dHB1dC4KCURpc2FsbG93IC1mZiB3aXRoIHBpcGVkIG91dHB1dC4gIEZpeGVzIFJIIzEwNTM2Ni4KCVJlcG9ydGVkIGJ5IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KCgkqIHN0cmFjZS5jICh0cHJpbnRmKTogQ2hlY2sgcmVzdWx0IG9mIHZmcHJpbnRmIGFuZCB1c2UgcGVycm9yIHdoZW4gaXQKCWZhaWxzIHdoaWxlIG5vdCB3cml0aW5nIHRvIHN0ZGVyciBpdHNlbGYuICBGaXhlcyBEZWJpYW4gYnVnICMyMTg3NjIuCgoJKiBuZXQuYyAocHJpbnRzb2NrKTogRml4IHR5cG8gaW4gI2lmZGVmIEFGX05FVExJTksuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoKMjAwMy0xMS0wMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN5c2NhbGwuYyAodHJhY2Vfc3lzY2FsbCkgW0xJTlVYXTogQ2FsY3VsYXRlIE9ORV9USUNLIG9uY2UgdXNpbmcKCXNldGl0aW1lciByYXRoZXIgdGhhbiBoYXJkLWNvZGluZyBhIHZhbHVlIGJhc2VkIG9uIEhaLgoJRml4ZXMgUkgjMTA4MDEyLCByZXBvcnRlZCBieSBGbG9yaWFuIExhIFJvY2hlIDxsYXJvY2hlQHJlZGhhdC5jb20+LgoKMjAwMy0xMC0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS4xOiBGaXhlZCBhIGZldyBzcGVsbGluZyBlcnJvcnMuCglGaXhlcyBEZWJpYW4gYnVnICMyMTcwMDguCgoJKiBzeXNjYWxsLmM6IFJldmVydCBsYXN0IGNoYW5nZSwgd2FzIGJyb2tlbi4KCjIwMDMtMTAtMDEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBwcm9jZXNzLmMgKGludGVybmFsX2Nsb25lKTogRG9uJ3Qgc3VzcGVuZCBwYXJlbnQgd2hlbiBjYWxsIHJlcXVlc3RlZAoJYSBzcGVjaWZpYyBQSUQgdGhhdCBpcyBub3QgYSB0cmFjZWQgY2hpbGQuCgoJKiBzaWduYWwuYyBbTElOVVhdIChwYXJzZV9zaWdzZXRfdCk6IFJld3JpdGUgdG8gcHJvY2VzcyBoZXggc3RyaW5ncwoJZnJvbSByaWdodCB0byBsZWZ0IHNvIHdlIGRvbid0IGhhdmUgdG8gcHJlc3VtZSB0aGUgc2l6ZS4KCVJlcG9ydGVkIGJ5IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAcmVkaGF0LmNvbT4uCgoyMDAzLTA5LTI1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbWVtLmMgKG1tYXBfcHJvdCkgW1BST1RfU0VNLCBQUk9UX0dST1dTRE9XTiwgUFJPVF9HUk9XU1VQXTogSW5jbHVkZQoJdGhlc2UgaW4gdGhlIHRhYmxlIGlmIHRoZXkgYXJlIGRlZmluZWQuCgoyMDAzLTA5LTI0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNS4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNS0xLgoKCSogc3lzY2FsbC5jIChnZXRfc2NubykgW0xJTlVYXSBbUzM5MCB8fCBTMzkwWF06IEJhaWwgb3V0IG9mCglpbnN0cnVjdGlvbiBkZWNvZGluZyBicmFuY2ggaWYgVENCX0lOU1lTQ0FMTCBpcyBjbGVhci4KCVJlcG9ydGVkIGJ5IDxqb2NoZW5AcGVuZ3Vpbi1icmVlZGVyLm9yZz4uCgoJKiBsaW51eC9pb2N0bGVudC5oOiBTd2FwIG9yZGVyIG9mIG92ZXJsb2FkZWQgVEMqIGFuZCBTTkRDVExfKiB2YWx1ZXMuCgoyMDAzLTA5LTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3RyYWNlLnNwZWM6IE9uIHBwYzY0IChtYXliZSBvdGhlcnMgbGF0ZXIpLCBjcmVhdGUgYW4gc3RyYWNlNjQKCXBhY2thZ2UgYXMgd2VsbCBjb250YWluaW5nIGp1c3QgL3Vzci9iaW4vc3RyYWNlNjQuCgoJKiBzaWduYWwuYyAoc3ByaW50c2lnbWFzayk6IFByaW50IFJUXyV1IGZvciBfX1NJR1JUTUlOLi5fX1NJR1JUTUFYLgoJRml4ZXMgUkgjMTA0MzY1LgoKMjAwMy0wOC0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogRml4IG1sb2NrIGFyZ3VtZW50IGNvdW50LiAgRml4ZXMgUkgjMTAxNDk5LgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvczM5MC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zMzkweC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoKMjAwMy0wNy0yOCAgRGFuaWVsIEphY29ib3dpdHogIDxkcm93QG12aXN0YS5jb20+CgoJKiBkZWZzLmggKEFMSUdONjQpOiBEZWZpbmUgZm9yIE1JUFMuCgkqIGlvLmMgKFBSRUFEX09GRlNFVF9BUkcpOiBEZWZpbmUuCgkoc3lzX3ByZWFkLCBzeXNfcHdyaXRlKTogVXNlIGl0LgoJKiBwcm9jZXNzLmMgKHN0cnVjdF91c2VyX29mZnNldHMpIFtTSF06IENoZWNrIHdoZXRoZXIgUkVHX1hEUkVHMAoJaXMgZGVmaW5lZC4KCSogbGludXgvc2gvc3lzY2FsbGVudC5oIChwcmVhZCwgcHdyaXRlKTogVGFrZSBzaXggYXJndW1lbnRzLgoJKHRydW5jYXRlNjQsIGZ0cnVuY2F0ZTY0KTogUHJldHR5LXByaW50LgoJKiBsaW51eC9taXBzL3N5c2NhbGxlbnQuaCAocHJlYWQsIHB3cml0ZSk6IFRha2Ugc2l4IGFyZ3VtZW50cy4KCSh0cnVuY2F0ZTY0LCBmdHJ1bmNhdGU2NCk6IFRha2UgZm91ciBhcmd1bWVudHMuCgoyMDAzLTA3LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNC45OS4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45OS0xLgoKMjAwMy0wNy0xNSAgQW50b24gQmxhbmNoYXJkICA8YW50b25Ac2FtYmEub3JnPgoKCSogaXBjLmM6IEFkZCBTSE1fSFVHRVRMQiBmaWVsZC4KCU1hc2sgb3V0IHBlcm1pc3Npb24gYml0cyBpbiBtc2dnZXQsIHNlbWdldCBhbmQgc2htZ2V0IGJlZm9yZQoJCXByaW50aW5nIHJlc291cmNlX2ZsYWdzLgoJTWFzayBleGVjdXRlIHBlcm1pc3Npb24gYml0cyAoZXZlbiB0aG91Z2ggd2UgZG9udCBjdXJyZW50bHkKCQl1c2UgdGhlbSkuCgoyMDAzLTA3LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50LmggKHRna2lsbCk6IE5ldyBhdCAyNTAuCgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IHRydW5jYXRlNjQvZnRydW5jYXRlNjQgbmVlZCAzIGFyZ3MuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoKCSogbGludXgvc3lzY2FsbGVudC5oOiBIYW5kbGUgc3RhdGZzNjQsIGZzdGF0ZnM2NCwgdXRpbWVzLgoJKiBmaWxlLmMgKHByaW50c3RhdGZzKTogUHJpbnQgZl9mc2lkIGFuZCBmX2Zyc2l6ZS4KCVtMSU5VWF0gKHByaW50c3RhdGZzNjQsIHN5c19zdGF0ZnM2NCwgc3lzX2ZzdGF0ZnM2NCk6IE5ldyBmdW5jdGlvbnMuCgkqIGxpbnV4L3N5c2NhbGwuaDogQWRkIGRlY2xzLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCjIwMDMtMDctMDkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaCAodGdraWxsKTogTmV3IGF0IDEyMzUuCgoyMDAzLTA3LTA1ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEB0d2lkZGxlLm5ldD4KCgkqIHByb2Nlc3MuYyAoc3lzX2Nsb25lKTogT3JkZXIgYXJndW1lbnRzIGZvciBhbHBoYSB0aGUgc2FtZSBhcyB4ODZfNjQuCgkqIHN5c2NhbGwuYyAoRVJFU1RBUlRfUkVTVEFSVEJMT0NLKTogTmV3LgoJKHRyYWNlX3N5c2NhbGwpOiBQcmludCBpdC4KCSogbGludXgvYWxwaGEvc3lzY2FsbGVudC5oIChvc2Zfc3lzY2FsbCk6IE5hbWUgcHJvcGVybHkuCgkob3NmX3NldF9wcm9ncmFtX2F0dHJpYnV0ZXMpOiBGaXggdHlwby4KCShvc2ZfbmZzc3ZjKTogTGlrZXdpc2UuCgkob3NmX3NpZ3NlbmRzZXQpOiBMaWtld2lzZS4KCShnZXRkZW50czY0LCBnZXR0aWQsIHJlYWRhaGVhZCwgdGtpbGwsIHNldHhhdHRyLCBsc2V0eGF0dHIsIGZzZXR4YXR0ciwKCWdldHhhdHRyLCBsZ2V0eGF0dHIsIGZnZXR4YXR0ciwgbGlzdHhhdHRyLCBsbGlzdHhhdHRyLCBmbGlzdHhhdHRyLAoJcmVtb3ZleGF0dHIsIGxyZW1vdmV4YXR0ciwgZnJlbW92ZXhhdHRyLCBmdXRleCwgc2NoZWRfc2V0YWZmaW5pdHksCglzY2hlZF9nZXRhZmZpbml0eSwgdHV4Y2FsbCwgaW9fc2V0dXAsIGlvX2Rlc3Ryb3ksIGlvX2dldGV2ZW50cywKCWlvX3N1Ym1pdCwgaW9fY2FuY2VsLCBleGl0X2dyb3VwLCBsb29rdXBfZGNvb2tpZSwgZXBvbGxfY3JlYXRlLAoJZXBvbGxfY3RsLCBlcG9sbF93YWl0LCByZW1hcF9maWxlX3BhZ2VzLCBzZXRfdGlkX2FkZHJlc3MsCglyZXN0YXJ0X3N5c2NhbGwsIGZhZHZpc2UsIHRpbWVyX2NyZWF0ZSwgdGltZXJfc2V0dGltZSwgdGltZXJfZ2V0dGltZSwKCXRpbWVyX2dldG92ZXJydW4sIHRpbWVyX2RlbGV0ZSwgY2xvY2tfc2V0dGltZSwgY2xvY2tfZ2V0dGltZSwKCWNsb2NrX2dldHJlcywgY2xvY2tfbmFub3NsZWVwLCBzZW10aW1lZG9wKTogTmV3LgoKMjAwMy0wNy0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHNpZ25hbC5jIChzeXNfdGdraWxsKTogTmV3IGZ1bmN0aW9uLgoJKiBsaW51eC9zeXNjYWxsLmg6IERlY2xhcmUgaXQuCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogQWRkIHRna2lsbC4KCjIwMDMtMDYtMjcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciB0eXBlIGBzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQnLgoJKiBmaWxlLmMgKGNvbnZlcnRvbGRzdGF0LCBwcmludG9sZHN0YXQpOiBEZWZpbmUgdW5kZXIKCVtMSU5VWCAmJiBIQVZFX1NUUlVDVF9fX09MRF9LRVJORUxfU1RBVF0gcmF0aGVyIHRoYW4gYSBsaXN0IG9mIGFyY2hzLgoJKHN5c19vbGRzdGF0LCBzeXNfb2xkZnN0YXQsIHN5c19vbGRsc3RhdCk6IExpa2V3aXNlLgoJKiBsaW51eC9kdW1teS5oIFshIEhBVkVfU1RSVUNUX19fT0xEX0tFUk5FTF9TVEFUXQoJKHN5c19vbGRzdGF0LCBzeXNfb2xkZnN0YXQsIHN5c19vbGRsc3RhdCk6ICNkZWZpbmUgdG8gcHJpbnRhcmdzLgoKMjAwMy0wNi0yNiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYzogU0hNRURJQSAtPiBTSDY0CgkqIGRlZnMuaDogTGlrZXdpc2UuCgkqIG1lbS5jOiBMaWtld2lzZS4KCSogcHJvY2Vzcy5jOiBMaWtld2lzZS4KCSogc29jay5jOiBMaWtld2lzZS4KCSogc3lzY2FsbC5jOiBMaWtld2lzZS4KCSogdXRpbC5jOiBMaWtld2lzZS4KCSogbGludXgvc2htZWRpYS9zeXNjYWxsZW50Lmg6IE1vdmVkIHRvIC4uLgoJKiBsaW51eC9zaDY0L3N5c2NhbGxlbnQuaDogLi4uIGhlcmUuCgoJKiBjb25maWcuZ3Vlc3M6IFVwZGF0ZSBmcm9tIGNhbm9uaWNhbCB2ZXJzaW9uLCB0aW1lc3RhbXAgMjAwMy0wNi0xNy4KCSogY29uZmlnLnN1YjogTGlrZXdpc2UuCgoJKiBzeXNjYWxsLmMgKGZvcmNlX3Jlc3VsdCkgW0xJTlVYXSBbQVJNXTogRml4IHZhcmlhYmxlIHVzYWdlLgoJRnJvbTogSm9zaHVhIE5lYWwgPHRpbmFyYUBuZXRwaXBlbGluZS5uZXQ+LgoKCSogcHJvY2Vzcy5jIFtMSU5VWF0gKHN5c19mdXRleCk6IEdyb2sgRlVURVhfUkVRVUVVRSBhbmQgcHJpbnQgNXRoIGFyZy4KCSogbGludXgvc3lzY2FsbGVudC5oOiBzeXNfZnV0ZXggYXJndW1lbnQgY291bnQgaXMgbm93IDUsIG5vdCA0LgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvczM5MC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zMzkweC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCUZyb20gSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4uCgoJKiBzeXNjYWxsLmMgKGdldF9zY25vKSBbUzM5MCB8fCBTMzkwWF06IEZpeCBvbGQgdnMgbmV3IG1vZGUgZGV0ZWN0aW9uLgoJRnJvbSBNaWNoYWVsIEhvbHpoZXUgPEhPTFpIRVVAZGUuaWJtLmNvbT4uCgoyMDAzLTA2LTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbmV0LmMgKHN5c19zb2NrZXQpOiBEZWNvZGUgcHJvdG9jb2wgZm9yIFBGX0lORVQ2IHNhbWUgYXMgUEZfSU5FVC4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCgoyMDAzLTA2LTEwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNC45OC4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45OC0xLgoKMjAwMy0wNi0wOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L3MzOTB4L3N5c2NhbGxlbnQuaDogVXBkYXRlIG1hbnkgc3lzY2FsbHMuCgkqIGxpbnV4L3N5c2NhbGwuaCAoU1lTX3NvY2tldF9zdWJjYWxsKTogVXBkYXRlIFtTMzkwWF0gdmFsdWUuCgoJKiBsaW51eC9zMzkwL3N5c2NhbGxlbnQuaDogVXBkYXRlIG1hbnkgc3lzY2FsbHMuCgkqIGxpbnV4L3N5c2NhbGwuaCAoU1lTX3NvY2tldF9zdWJjYWxsKTogVXBkYXRlIFtTMzkwXSB2YWx1ZS4KCgkqIGxpbnV4L3NobWVkaWEvc3lzY2FsbGVudC5oOiBOZXcgZmlsZS4KCUZyb20gU3RlcGhlbiBUaG9tYXMgPHN0ZXBoZW4udGhvbWFzQHN1cGVyaC5jb20+LgoKCSogc3RyYWNlLmMgKHRyYWNlKTogUHJpbnQgYSBtZXNzYWdlIGFuZCBuZXdsaW5lIGZvciBhIFdJRkVYSVRFRCByZXBvcnQKCWZyb20gdGhlIHByb2Nlc3Mgd2UganVzdCBwcmludGVkIGFuIHVudGVybWluYXRlZCBzeXNjYWxsIGxpbmUgZm9yLgoKMjAwMy0wNi0wMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHV0aWwuYyAocHJpbnRjYWxsKSBbTElOVVhdOiBGaXggdHlwbyBbSUE2Ml0gLT4gW0lBNjRdLgoKCUxpbnV4L0FSTSBpbXByb3ZlbWVudHMgZnJvbSBSdXNzZWxsIEtpbmcgPHJta0Bhcm0ubGludXgub3JnLnVrPjoKCSogZGVmcy5oIFtMSU5VWF0gKFRDQl9XQUlURVhFQ1ZFKTogRGVmaW5lIGZvciBbQVJNXSB0b28uCgkqIHByb2Nlc3MuYyAoc3RydWN0X3VzZXJfb2Zmc2V0cykgW0xJTlVYXSBbQVJNXTogQWRkIEFSTSByZWdpc3RlcnMuCgkqIHNpZ25hbC5jIFtMSU5VWF0gKHN5c19zaWdyZXR1cm4pIFtBUk1dOiBOZXcgY2FzZS4KCSogc3lzY2FsbC5jIChnZXRfc2Nubywgc3lzY2FsbF9maXh1cCkgW0xJTlVYXSBbQVJNXTogQ2FzZSByZXdyaXR0ZW4uCgkoZ2V0X2Vycm9yKSBbTElOVVhdIFtBUk1dOiBVcGRhdGUuCgkoc3lzY2FsbF9lbnRlcikgW0xJTlVYXSBbQVJNXTogTmV3IGNhc2UuCgkqIHV0aWwuYyAocHJpbnRjYWxsKSBbTElOVVhdIFtBUk1dOiBOZXcgY2FzZS4KCgkqIGRlYmlhbi9jb250cm9sIChTdGFuZGFyZHMtVmVyc2lvbik6IFVwZGF0ZSB0byAzLjUuMTAuCgoJKiBzdHJhY2UuYyAobWFpbik6IEluIFBBVEggc2VhcmNoLCBhY2NlcHQgb25seSBhIHJlZ3VsYXIgZmlsZSB3aXRoCglleGVjdXRlIGJpdHMgc2V0LiAgRml4ZXMgRGViaWFuIGJ1ZyAjMTM3MTAzLgoKMjAwMy0wNi0wMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS5jIChtYWluKTogU2V0IC1xIHdoZW4gZ2l2ZW4gLW8gYW5kIG5vdCAtcCwgYW5kIG5vdCB3aGVuIG5vdAoJZ2l2ZW4gLW8sIHRvIG1hdGNoIHdoYXQgdGhlIG1hbiBwYWdlIGFsd2F5cyBzYWlkLgoJRml4ZXMgRGViaWFuIGJ1ZyAjNDcxMTMsICMxNTM2NzguCgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC40Ljk3LgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC40Ljk3LTEuCgoJKiBjb25maWd1cmUuYWMsIGRlZnMuaCwgbWVtLmMsIHByb2Nlc3MuYywgc29jay5jLCBzeXNjYWxsLmMsIHV0aWwuYzoKCU1lcmdlZCBpbiBTSG1lZGlhIHBvcnQgZnJvbSBTdGVwaGVuIFRob21hcyA8c3RlcGhlbi50aG9tYXNAc3VwZXJoLmNvbT4uCgoJKiBjb25maWcuZ3Vlc3M6IFVwZGF0ZSBmcm9tIGZ0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvY29uZmlnLywKCXRpbWVzdGFtcCAyMDAzLTA1LTIyLgoJKiBjb25maWcuc3ViOiBMaWtld2lzZSwgdGltZXN0YW1wIDIwMDMtMDUtMjQuCgoyMDAzLTA1LTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogZGVmcy5oIChzdHJ1Y3QgdGNiKTogTmV3IG1lbWJlciBgbnpvbWJpZXMnLgoJKiBzdHJhY2UuYyAoYWxsb2N0Y2IpOiBJbml0aWFsaXplIGl0LgoJKGRyb3B0Y2IpOiBJbmNyZW1lbnQgb3VyIHBhcmVudCdzIHpvbWJpZSBjb3VudC4KCSogcHJvY2Vzcy5jIChpbnRlcm5hbF93YWl0KTogRG9uJ3QgZ28gaW50byBUQ0JfU1VTUEVOREVEIGlmIHRoZQoJcHJvY2VzcyBoYXMgem9tYmllcyBpdCBjYW4gcmVhcC4gIE9uIHRoZSB3YXkgb3V0LCBpZiB3ZSByZWFwZWQKCWFuIHVudHJhY2VkIHByb2Nlc3MsIGRlY3JlbWVudCB0aGUgem9tYmllIGNvdW50LgoKCSogcHJvY2Vzcy5jIChzeXNfY2xvbmUpOiBNYXNrIENTSUdOQUwgb3V0IG9mIGZsYWdzIGFuZCBwcmludCB0aGF0CglzZXBhcmF0ZWx5IHVzaW5nIHNpZ25hbWUuCgoJKiBwcm9jZXNzLmMgKGludGVybmFsX2Nsb25lKSBbVENCX0NMT05FX1RIUkVBRF06IFVzZSBBUkdfRkxBR1MgaW5zdGVhZAoJb2YgbGl0ZXJhbCAwIGZvciBpbmRleC4gIENvbnN1bHQgdGhlIHJpZ2h0IGZsYWdzIHdpdGhvdXQgY2xvYmJlcmluZwoJYW55dGhpbmcgd2hlbiB3ZSByZXBhcmVudCB0aGUgbmV3IGNoaWxkIHRvIHRoZSBjYWxsZXIncyBwYXJlbnQgdGhyZWFkLgoKCSogbGludXgvczM5MC9zeXNjYWxsZW50Lmg6IEZpeCBzeXNfY2xvbmUgYXJndW1lbnQgY291bnQuCgkqIGxpbnV4L3MzOTB4L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L21pcHMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvYWxwaGEvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zaC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zcGFyYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9ocHBhL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgoJKiBwcm9jZXNzLmMgW0xJTlVYXSBbUzM5MCB8fCBTMzkwWF0gKEFSR19DVElELCBBUkdfVExTKTogRml4IHN3YXBwZWQKCWluZGljZXMuICBSZXBvcnRlZCBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPi4KCgkqIHNpZ25hbC5jIFtMSU5VWF0gKFNJX1NJR0lPLCBTSV9US0lMTCk6IE5ldyBtYWNyb3MuCglbTElOVVggfHwgU1ZSNF0gKHNpZ2luZm9fY29kZXMpOiBBZGQgc3RyaW5ncyBmb3IgdGhlbS4KCgkqIHByb2Nlc3MuYyAocHJpbnRfYWZmaW5pdHlsaXN0KTogRml4IGxvb3AgY29uZGl0aW9uLgoJUmVwb3J0ZWQgYnkgSWFuIFdpZW5hbmQgPGlhbndAZ2VsYXRvLnVuc3cuZWR1LmF1Pi4KCjIwMDMtMDQtMTAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXNjYWxsLmMgKHF1YWxfZGVzYyk6IFJldHVybiB6ZXJvIGFmdGVyIHBhcnNpbmcgbnVtYmVyLgoJRnJvbSBSb2IgTGVzbGllIDxyb2JAbWFycy5vcmc+LCBmaXhlcyBEZWJpYW4gYnVnICMxODgzNzkuCgoyMDAzLTA0LTA3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvc3lzY2FsbGVudC5oOiBIYW5kbGUgc2VtdGltZWRvcCBzdWJjYWxsIG9mIGlwYyBzeXNjYWxsLgoJKiBsaW51eC9zeXNjYWxsLmg6IExpa2V3aXNlLgoJKiBpcGMuYyBbTElOVVhdIChzeXNfc2VtdGltZWRvcCk6IE5ldyBmdW5jdGlvbi4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCgoJKiBpcGMuYyAoc3lzX3NlbWdldCk6IE1hc2sgb2ZmIHBlcm1pc3Npb24gYml0cyBmb3IgcmVzb3VyY2VfZmxhZ3MuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoKMjAwMy0wNC0wMSAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBtYWNxZWwuYmU+CgoJKiBzb2NrLmMsIHN0cmVhbS5jOiBDaGVjayAjaWZkZWYgTElOVVgsIG5vdCBsaW51eC4KCSogZmlsZS5jOiBBbHdheXMgcHJvdmlkZSBzeXNfKmF0dHIsIHJlZ2FyZGxlc3Mgb2YgI2lmZGVmIFhBVFRSX0NSRUFURS4KCjIwMDMtMDMtMzAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC40Ljk2LgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC40Ljk2LTEuCgoyMDAzLTAyLTI2ICBTdHVhcnQgTWVuZWZ5IDxzdHVhcnQubWVuZWZ5QHN0LmNvbT4KCglWYXJpb3VzIGZpeGVzIGZvciBTdXBlckggW1NIXToKCSogbWVtLmMgKHN5c19vbGRfbW1hcCk6IG1tYXAoKSBwYXJhbWV0ZXJzIHBhc3NlZCBpbiByZWdpc3RlcnMKCSogbmV0LmMgKHN5c19waXBlKSwgc3lzY2FsbC5jIChnZXRydmFsMik6IHBpcGUoKSByZXN1bHRzIHJldHVybmVkCglpbiByZWdpc3RlcnMKCSogcHJvY2Vzcy5jIChjaGFuZ2Vfc3lzY2FsbCk6IEZpeGVkIHJlZ2lzdGVyIHdoaWNoIGhvbGRzIHN5c3RlbQoJY2FsbCBudW1iZXIKCSogdXRpbC5jIChhcmcwX29mZnNldCwgYXJnMV9vZmZzZXQpOiBwcm92aWRlIGRlZmluaXRpb24KCSogTWFrZWZpbGUuYW06IEFkZGVkIG5ldyBmaWxlcyBpbiBsaW51eC9zaAoJKiBsaW51eC9zaC9zeXNjYWxsZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zaC9lcnJub2VudC5oOiBOZXcgZmlsZS4KCSogbGludXgvc2gvaW9jdGxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3NoL3NpZ25hbGVudC5oOiBOZXcgZmlsZS4KCgkqIGxpbnV4L2lvY3RsZW50LnNoOiBUYWtlIGFuIGFyZyBmb3IgbG9jYXRpb24gb2YgaGVhZGVyIGZpbGVzCgkqIHN5c2NhbGxlbnQuc2g6IFJlcGxhY2VkIGxvc3QgJAoKMjAwMy0wMy0zMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHRpbWUuYyBbTElOVVhdOiBIYW5kbGUgbmV3IExpbnV4IDIuNSBjbG9jay90aW1lciBzeXNjYWxscy4KCSogbGludXgvc3lzY2FsbC5oLCBsaW51eC9zeXNjYWxsZW50LmgsIGxpbnV4L2R1bW15Lmg6IExpa2V3aXNlLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXNlIHN5c19nZXRybGltaXQgZm9yIDE5MS4KCVVzZSBuYW1lICJvbGRfZ2V0cmxpbWl0IiBmb3IgNzYuCglSZXBvcnRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCjIwMDMtMDMtMTggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBwcm9jZXNzLmMgW0xJTlVYXSAoc3lzX2Nsb25lKTogRG9uJ3QgZGVyZWZlcmVuY2UgcGFyZW50X3RpZCBhcmd1bWVudC4KCjIwMDMtMDMtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBjbG9uZSB0YWtlcyA1IGFyZ3MuCgkqIHByb2Nlc3MuYyBbTElOVVhdIChzeXNfY2xvbmUpIFtYODZfNjRdOiBGaXggYXJndW1lbnQgb3JkZXIuCgoyMDAzLTAzLTE1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogQWRkIGV4aXRfZ3JvdXAgc3lzY2FsbCBhdCAyMzEuCgoyMDAzLTAzLTE0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogVXBkYXRlIGFuZCBhZGQgbWFueSAyLjUgc3lzY2FsbHMuCgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogY2xvbmUgdGFrZXMgNSBhcmd1bWVudHMuCgkqIHByb2Nlc3MuYyBbTElOVVggJiYgSUE2NF0gKEFSR18qKTogVXBkYXRlIGZvciAyLjUgY2xvbmUgY2FsbHMuCgoyMDAzLTAzLTEyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IEZpeCBhcmcgY291bnRzIGZvciBjbG9uZSBhbmQgY2xvbmUyLgoJVXNlIHN5c19jbG9uZSBmb3IgY2xvbmUyLgoJKiBsaW51eC9zeXNjYWxsLmg6IERvbid0IGRlY2xhcmUgc3lzX2Nsb25lMi4KCSogcHJvY2Vzcy5jIChzeXNfY2xvbmUpOiBSZXdyaXR0ZW4gdG8gaGFuZGxlIGJvdGggZmxhdm9ycywKCXByaW50IGFsbCBleHRyYSBhcmdzIGRlcGVuZGluZyBvbiBmbGFnIGJpdHMuCgkoc3lzX2Nsb25lMik6IEZ1bmN0aW9uIHJlbW92ZWQuCgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogQWRkIGEgYnVuY2ggb2YgMi41IHN5c2NhbGxzLgoKMjAwMy0wMy0wNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN5c2NhbGwuYyAoZ2V0X3Njbm8pIFtJQTY0XTogRG8gVENCX1dBSVRFWEVDVkUgY2hlY2sgb25seSB3aGVuCglUQ0JfSU5TWVNDQUxMIGlzIGNsZWFyLCBsaWtlIG90aGVyIHBsYXRmb3JtcyBkby4KCjIwMDMtMDMtMDQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgoKCSogbWVtLmMgW0xJTlVYXSAoc3lzX3JlbWFwX2ZpbGVfcGFnZXMpOiBOZXcgZnVuY3Rpb24uCgkqIGxpbnV4L3N5c2NhbGwuaDogRGVjbGFyZSBpdC4KCSogbGludXgvc3lzY2FsbGVudC5oOiBVc2UgaXQuCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCgkqIHByb2Nlc3MuYyBbTElOVVhdIChzeXNfZnV0ZXgpOiBPbWl0IGZpbmFsIGlmIG9wIGlzIG5vdCBGVVRFWF9XQUlULgoKMjAwMy0wMi0yNiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYzogRml4IHR5cG8gaW4gbmV0aW5ldC9pbi5oIGNoZWNrLgoJQWxzbyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gYW5kIDxzeXMvc29ja2V0Lmg+IGJlZm9yZSA8bmV0aW5ldC9pbi5oPi4KCVJlcG9ydGVkIGJ5IEFsZXggU2VtZW55YWthIDxhbGV4c0BzbmFyay5yaW5ldC5ydT4uCgoyMDAzLTAyLTI0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNC45NS4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45NS0xLgoKCSogcHJvY2Vzcy5jIChzeXNfZ2V0cmVzZ2lkKTogRml4IHR5cG9zIGluIGFyZ3VtZW50IGFjY2Vzcy4KCjIwMDMtMDItMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBwcm9jZXNzLmMgKHN5c19nZXRyZXN1aWQpOiBGaXggdHlwb3MgaW4gYXJndW1lbnQgYWNjZXNzLgoJUmVwb3J0ZWQgYnkgQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKMjAwMy0wMi0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjQuOTQuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTQtMS4KCgkqIHZlcnNpb24uYzogUmVtb3ZlZC4KCSogTWFrZWZpbGUuYW0gKHN0cmFjZV9TT1VSQ0VTKTogUmVtb3ZlIGl0LgoJKiBzdHJhY2UuYzogVXNlIFBBQ0tBR0VfTkFNRSBhbmQgVkVSU0lPTiBtYWNyb3MgaW5zdGVhZCBvZiB2ZXJzaW9uIHZhci4KCglGcmVlQlNEIHJmb3JrIHN1cHBvcnQgY2hhbmdlcyBmcm9tIFJ1c3MgQ294IDxyc2NAcGxhbjkuYmVsbC1sYWJzLmNvbT46CgkqIHN5c2NhbGwuYyAoaW50ZXJuYWxfc3lzY2FsbCk6IEhhbmRsZSBTWVNfcmZvcmsgd2l0aCBpbnRlcm5hbF9mb3JrLgoJKiBwcm9jZXNzLmMgKGludGVybmFsX2ZvcmspIFtTWVNfcmZvcmtdOiBCYWlsIGlmIFJGUFJPQyBmbGFnIG5vdCBzZXQuCgoyMDAzLTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc2lnbmFsLmM6IFJlb3JkZXIgI2lmZGVmcyBzbyBIQVZFX0FTTV9TSUdDT05URVhUX0ggZG9lc24ndCBtYXR0ZXIgb24KCVNQQVJDLCB3aGljaCBkb2Vzbid0IHVzZSB0aGUgaGVhZGVyIHJlZ2FyZGxlc3MuCgoJKiB1dGlsLmMgW0xJTlVYICYmIFNQQVJDXTogRG8gcmVuYW1pbmcga2x1ZGdlcyBhcm91bmQgPGFzbS9yZWcuaD4KCWxpa2Ugc2lnbmFsLmMgZG9lcy4KCgkqIGxpbnV4L3NwYXJjL3N5c2NhbGwuaDogRGVjbGFyZSBzeXNfZ2V0ZGVudHM2NCwgc3lzX2xsc2Vlay4KCgkqIGxpbnV4L2R1bW15LmggWyEgU1lTX2dldHBtc2ddIChzeXNfZ2V0cG1zZyk6ICNkZWZpbmUgdG8gcHJpbnRhcmdzLgoJWyEgU1lTX3B1dHBtc2ddIChzeXNfcHV0cG1zZyk6IExpa2V3aXNlLgoKCSogcHJvY2Vzcy5jOiBSZW9yZGVyIGluY2x1ZGVzIHRvIHB1dCBzeXMvcmVnLmggYmVmb3JlIGxpbnV4L3B0cmFjZS5oLAoJc2luY2UgdGhleSBjYW4gY29uZmxpY3QuCgoyMDAzLTAxLTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3RyYWNlLmMgKHVzYWdlKTogT21pdCAteiwgc2luY2UgaXQgaGFzIG5ldmVyIHdvcmtlZCBwcm9wZXJseS4KCSogTkVXUzogTGlrZXdpc2UuCgoJKiBzdHJhY2UuYyAobWFpbik6IEdyb2sgbmV3IG9wdGlvbiBgLUUgdmFyPXZhbCcgb3IgYC1FIHZhcicgdG8gcHV0Cgl2YXI9dmFsIGluIGVudmlyb24gb3IgdG8gcmVtb3ZlIHZhciwgcmVzcGVjdGl2ZWx5LgoJKHVzYWdlKTogTWVudGlvbiBpdC4KCSogc3RyYWNlLjEsIE5FV1M6IERvY3VtZW50IGl0LgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNC45My4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45My0xLgoJKiBzdHJhY2Uuc3BlYyAoU291cmNlMCk6IFVzZSBzdHJhY2UtVkVSU0lPTi50YXIuYnoyIG5vdy4KCjIwMDMtMDEtMjAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBkZWZzLmggW0xJTlVYXSBbUzM5MCB8fCBTMzkwWF0gKFRDQl9XQUlURVhFQ1ZFKTogRGVmaW5lIGl0LgoJKiBzeXNjYWxsLmMgKGdldF9zY25vLCBzeXNjYWxsX2ZpeHVwKSBbTElOVVhdIFtTMzkwIHx8IFMzOTBYXTogSGFuZGxlCglUQ0JfV0FJVEVYRUNWRSBzdGF0ZSB3aXRoIHNwZWNpYWwga2x1ZGdlcy4KCgkqIHByb2Nlc3MuYyBbTElOVVhdIChzeXNfY2xvbmUpIFtTMzkwIHx8IFMzOTBYXTogQXJndW1lbnQgb3JkZXIgaXMKCXJldmVyc2VkIGZyb20gb3RoZXIgYXJjaGl0ZWN0dXJlcy4KCgkqIHByb2Nlc3MuYyAoc3lzX2V4ZWN2ZSkgW0xJTlVYXTogTWFrZSBzZXR0aW5nIFRDQl9XQUlURVhFQ1ZFIGZsYWcKCWNvbmRpdGlvbmFsIG9uIFtUQ0JfV0FJVEVYRUNWRV0gaW5zdGVhZCBvZiBsaXN0IG9mIHByb2Nlc3NvcnMuCgoJKiB1dGlsLmMgKHJlc3RvcmVfYXJnMCk6IEV2YWx1YXRlIGFyZ3MgaW4gbm8tb3AgZGVmbnMuCgoJKiB1dGlsLmMgW1MzOTAgfHwgUzM5MFhdIChhcmcwX29mZnNldCwgYXJnMV9vZmZzZXQpOiBGaXggZGVmaW5pdGlvbnMKCWZvciBjbG9uZSBjYWxsIG9uIFMzOTAuICBGcm9tIE1pY2hhZWwgSG9semhldSA8aG9semhldUBkZS5pYm0uY29tPi4KCjIwMDMtMDEtMTcgIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPgoKCSogdXRpbC5jIFtMSU5VWF0gKHNldGJwdCk6IEhhbmRsZSBTWVNfdmZvcmsgbGlrZSBTWVNfZm9yay4KCgkqIGxpbnV4L3N5c2NhbGwuaCAoU1lTX3NvY2tldF9zdWJjYWxsKTogMjU2IGFsc28gZm9yIFBPV0VSUEMuCgoyMDAzLTAxLTE0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvcG93ZXJwYy9lcnJub2VudC5oOiBBZGQgbWlzc2luZyBlcnJub3MuCgkqIGxpbnV4L3Bvd2VycGMvaW9jdGxlbnQuaDogVXBkYXRlIGlvY3RsIHZhbHVlcy4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogaW8uYyBbTElOVVhdIChzeXNfcHJlYWQsIHN5c19wd3JpdGUpOiBGaXggbGFzdCBjaGFuZ2UuCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIGxpbnV4L2hwcGEvc3lzY2FsbGVudC5oOiBVc2Ugc3lzX2dldGRlbnRzNjQsIHN5c190cnVuY2F0ZTY0LAoJc3lzX2Z0cnVuY2F0ZTY0LCBpbnN0ZWFkIG9mIHByaW50YXJncywgZm9yIHRob3NlIHN5c2NhbGxzLgoJKiBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvczM5MC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zcGFyYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoKCSogbGludXgvc3lzY2FsbC5oIChTWVNfc29ja2V0X3N1YmNhbGwpOiBPbmx5IDI1NiBmb3IgUzM5MCwgUzM5MFguCglBbGwgb3RoZXJzIGF0IHRoZSBtb21lbnQgdXNlIGxpbnV4L3N5c2NhbGxlbnQuaCwgd2hlcmUgaXQncyAzMDAuCgoJKiBzdHJhY2UuMTogVXBkYXRlIGJ1ZyByZXBvcnRpbmcgaW5mby4KCgkqIHJlc291cmNlLmMgW0xJTlVYXSAocXVvdGFjbWRzKTogR3JvayBuZXcgY29tbWFuZCBlbmNvZGluZ3MuCglGcm9tIE5hdGhhbiBTY290dCA8bmF0aGFuc0BkZWJpYW4ub3JnPi4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjQuOTIuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTItMS4KCgkqIGNvbmZpZ3VyZS5hYzogTWF0Y2ggcG93ZXJwYyogKGluY2x1ZGVzIHBvd2VycGM2NCksIGFuZCBkb24ndCBtYXRjaAoJcHBjIChuZXZlciBjb21lcyBvdXQgb2YgY29uZmlnLnN1YikuCgoJKiBwcm9jZXNzLmMgKHN5c19wdHJhY2UpOiBVc2UgI2x4IGZvcm1hdCBmb3IgYWRkcmVzcyBhcmd1bWVudC4KCVtQT1dFUlBDXTogVXNlIHNpemVvZih1bnNpZ25lZCBsb25nKSBpbiBwbGFjZSBvZiA0IGZvciBtdWx0aXBsaWVycy4KCSogcHJvY2Vzcy5jIFtQT1dFUlBDXTogTGlrZXdpc2UuCgkqIHNpZ25hbC5jIChzeXNfc2lncmV0dXJuKSBbUE9XRVJQQ106IExpa2V3aXNlLgoJKiBzeXNjYWxsLmMgKGdldF9zY25vKSBbUE9XRVJQQ106IExpa2V3aXNlLgoJKiB1dGlsLmMgW1BPV0VSUENdOiBMaWtld2lzZS4KCShwcmludG51bSk6IFVzZSBsb25nIGZvciBOVU0uCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIGRlZnMuaCAoQUxJR042NCk6IEZpeCBkZWZuIGZvciBQUEMsIHNhbWUgYXMgRnJlZUJTRCBvbmUuCgoJKiB1dGlsLmMgW0xJTlVYXSAocmVzdG9yZV9hcmcwLCByZXN0b3JlX2FyZzEpOiBOZXcgbWFjcm9zLCBkZWZpbmVkCglhcHByb3ByaWF0ZWx5IHZpYSBzZXRfYXJnMCBvciBuby1vcHMgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlLgoJKGNsZWFyYnB0KTogVXNlIHRob3NlIGluc3RlYWQgb2Ygc2V0X2FyZzAgYW5kIHNldF9hcmcxLgoKCSogZGVmcy5oIFtfTEFSR0VGSUxFNjRfU09VUkNFXSAoX0xGUzY0X0xBUkdFRklMRSk6IERlZmluZSBpdC4KCSogbGludXgvc3lzY2FsbGVudC5oOiBVc2Ugc3lzX2dldGRlbnRzNjQsIHN5c190cnVuY2F0ZTY0LAoJc3lzX2Z0cnVuY2F0ZTY0LCBpbnN0ZWFkIG9mIHByaW50YXJncywgZm9yIHRob3NlIHN5c2NhbGxzLgoKCSogcHJvY2Vzcy5jOiBVc2UgPGxpbnV4L3B0cmFjZS5oPiByZWdhcmRsZXNzIG9mIDxzeXMvcmVnLmg+LgoJKHN5c19wdHJhY2UpOiBVc2UgcHJpbnR4dmFsLgoJKHB0cmFjZV9jbWRzKTogTWFrZSBQVFJBQ0VfR0VUUkVHUyBldCBhbCBjb25kaXRpb25hbCBvbiAjaWZkZWYgUFRSQUNFXyoKCWluc3RlYWQgb2Ygb25seSAjaWZkZWYgU1VOT1M0LiAgQWRkIFBUUkFDRV9bR1NdRVRGUFhSRUdTLgoKCSogaXBjLmMgKFBSSU5UQ1RMKTogTmV3IG1hY3JvLiAgI2lmZGVmIElQQ182NCwgZmFjdG9yIG91dCB0aGUgZmxhZyBhbmQKCXByaW50IGl0IGJlZm9yZSB1c2luZyBwcmludHh2YWwuCgkoc3lzX21zZ2N0bCwgc3lzX3NlbWN0bCwgc3lzX3NobWN0bCk6IFVzZSBpdC4KCjIwMDMtMDEtMTMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWcuZ3Vlc3M6IFVwZGF0ZSBmcm9tIGZ0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvY29uZmlnLywKCXRpbWVzdGFtcCAyMDAzLTAxLTEwLgoJKiBjb25maWcuc3ViOiBMaWtld2lzZSwgdGltZXN0YW1wIDIwMDMtMDEtMDMuCgkqIGluc3RhbGwtc2g6IFVwZGF0ZSBmcm9tIEF1dG9tYWtlIDEuNy4yLgoKCSogbGludXgvcG93ZXJwYy9zaWduYWxlbnQuaDogQWRkIFNJR1JUTUlOLgoJRnJvbSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4uCgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogQWRkIG1pc3Npbmcgc3lzdGVtIGNhbGxzLgoJRGVjb2RlIG1vcmUgc3lzdGVtIGNhbGxzLCB3ZSB3ZXJlIGp1c3QgcHJpbnRhcmdzIGZvciBtYW55IHRoaW5ncy4KCVJlbW92ZSBzb21lIHg4Ni1zcGVjaWZpYyBzeXN0ZW0gY2FsbHMuCglSZW1vdmUgdHdvIHN5c2NhbGxzIGJldHdlZW4gdGhlIHNvY2tldCBhbmQgaXBjIHN5c2NhbGxzLAoJaXQgd2FzIHJlc3VsdGluZyBpbiBhbGwgSVBDIHN5c2NhbGxzIGJlaW5nIG9mZiBieSB0d28uCgoJKiBpb2N0bC5jIChpb2N0bF9kZWNvZGUpIFtQT1dFUlBDXTogRGVjb2RlIHRlcm0gaW9jdGxzIGxpa2UgQWxwaGEuCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIGRlZnMuaCBbUE9XRVJQQ10gKFVFU1AsIEVJUCwgRUFYLCBPUklHX0VBWCk6IFJlbW92ZSB0aGlzIGNydWZ0LgoJW0xJTlVYICYmIFBPV0VSUEMgJiYgIV9fcG93ZXJwYzY0X19dIChBTElHTjY0KTogTmV3IG1hY3JvLgoJKiBpby5jIChzeXNfcHJlYWQsIHN5c19wd3JpdGUpOiBVc2UgQUxJR042NC4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogdGVybS5jIFtMSU5VWF06IEdldCBrZXJuZWwgZGVmaW5pdGlvbiBvZiBzdHJ1Y3QgdGVybWlvcy4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogbGludXgvaW9jdGxlbnQuc2g6IExvb2sgaW4gc291bmQvIGRpcmVjdG9yeSB0b28uCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIGRlc2MuYyAocHJpbnRmbG9jazY0KTogRml4IEFERFIgYXJndW1lbnQgdHlwZS4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogc3RyYWNlLmMgWyEgSEFWRV9TVFJTSUdOQUxdOiBDbGVhbiB1cCAjaWZkZWZzIG9uIGRlY2xzIGZvcgoJc3lzX3NpZ2xpc3QgYW5kIF9zeXNfc2lnbGlzdC4KCVJlcG9ydGVkIGJ5IEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4uCgoJKiBuZXQuYzogSEFWRV9PUFRIRFIgLT4gSEFWRV9TVFJVQ1RfT1BUSERSCglSZXBvcnRlZCBieSBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+LgoKCSogbGludXgvc3lzY2FsbC5oIFtBUk1dIChTWVNfc29ja2V0X3N1YmNhbGwpOiBTZXQgdG8gMzAwLgoKMjAwMy0wMS0xMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjQuOTEuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTEtMQoKCSogdXRpbC5jIFtMSU5VWCAmJiBYODZfNjRdIChhcmcwX29mZnNldCwgYXJnMV9vZmZzZXQpOiBVc2UgY29ycmVjdAoJdmFsdWVzIGZvciB4ODYtNjQsIGNvbmRpdGlvbmFsIG9uIGN1cnJlbnRfcGVyc29uYWxpdHkuCgoJKiBzdHJhY2UuYyAoZHJvcHRjYik6IENsZWFyIGZsYWdzIHdvcmQgYmVmb3JlIGNhbGxpbmcgcmVidWlsZF9wb2xsdi4KCgkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgc3RydWN0IFRfY29ubl9yZXMgZm9yIFFVRVVFX3B0ciBvciBBQ0NFUFRPUl9pZC4KCSogc3RyZWFtLmMgKHByaW50X3RyYW5zcG9ydF9tZXNzYWdlKTogVXNlICNpZmRlZnMgZm9yIHRob3NlIG1lbWJlcnMuCgoJKiBzdHJhY2UuYyAocmVidWlsZF9wb2xsdik6IEZpeCB0eXBvOiBzdHJ1Y3QgcG9sbCAtPiBzdHJ1Y3QgcG9sbGZkLgoKCSogY29uZmlndXJlLmFjOiBGaXggc2lnaW5mb190L3NpZ19hdG9taWNfdCBjaGVja3MuCglVc2UgcHJlcmVxdWlzaXRlICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+IGZvciBuZXRpbmV0LyouaCBjaGVja3MuCgoJKiBzdHJhY2UuYyAocGZkMnRjYik6IEZpeCBmb3IgbmV3IHRjYnRhYiB0eXBlLgoJKHJlYnVpbGRfcG9sbHYpOiBMaWtld2lzZS4KCShkZXRhY2gpOiBQdXQgdmFyaWFibGVzIHVzZWQgdW5kZXIgW0xJTlVYXSBpbnNpZGUgI2lmZGVmLgoKCSogcHJvY2Vzcy5jIChjaGFuZ2Vfc3lzY2FsbCkgW1BPV0VSUENdOiBBZGQgbWlzc2luZyByZXR1cm4uCgkqIHV0aWwuYyBbUE9XRVJQQ10gKGFyZzBfb2Zmc2V0KTogU2V0IHRvIDQqUFRfUjMsIG5vdCA0KlBUX09SSUdfUjMuCgoJKiBzdHJhY2Uuc3BlYzogTmV3IGZpbGUuCgkqIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45MC0xCgkqIGRlYmlhbi9ydWxlcyAoYmluYXJ5LWFyY2gpOiBEZXBlbmQgb24gYnVpbGQuCgkoY2xlYW4pOiBEb24ndCB0cnkgdG8gcnVuIE1ha2VmaWxlLmluLgoJKiBkZWJpYW4vY29udHJvbCAoU3RhbmRhcmRzLVZlcnNpb24pOiBOb3cgMy41LjguCgoJKiBjb25maWd1cmUuYWM6IERpZGRsZSBDRkxBR1MgYWZ0ZXIgQUNfUFJPR19DQywgbm90IGJlZm9yZS4KCjIwMDMtMDEtMDkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXNjYWxsLmMgKGZvcmNlX3Jlc3VsdCkgW1MzOTAgfHwgUzM5MFhdOiBGaXggdHlwby4KCgkqIGRlYmlhbi9jb250cm9sOiBVcGRhdGUgTWFpbnRhaW5lcjogZmllbGQuCgoyMDAzLTAxLTA4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogTkVXUzogVXBkYXRlIGZvciA0LjQuOTAgdGVzdCByZWxlYXNlLgoKCVN1cHBvcnQgZm9yIG5ldyBMaW51eCAyLjUgdGhyZWFkIGZlYXR1cmVzLgoJKiBkZWZzLmggW0xJTlVYXTogRGVmaW5lIF9fTlJfZXhpdF9ncm91cCBpZiBub3QgZGVmaW5lZC4KCShzdHJ1Y3QgdGNiKTogTmV3IG1lbWJlcnMgbmNsb25lX3RocmVhZHMsIG5jbG9uZV9kZXRhY2hlZCwKCWFuZCBuY2xvbmVfd2FpdGluZy4KCShUQ0JfQ0xPTkVfREVUQUNIRUQsIFRDQl9DTE9ORV9USFJFQUQsIFRDQl9HUk9VUF9FWElUSU5HKTogTmV3IG1hY3Jvcy4KCSh3YWl0aW5nX3BhcmVudCk6IE1hY3JvIHJlbW92ZWQuCgkocGlkMnRjYik6IERlY2xhcmUgaXQuCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfY2xvbmUpIFtUQ0JfQ0xPTkVfVEhSRUFEXTogUmVwYXJlbnQgdGhlIG5ldwoJY2hpbGQgdG8gb3VyIHBhcmVudCBpZiB3ZSBhcmUgYSBDTE9ORV9USFJFQUQgY2hpbGQgb3Vyc2VsdmVzLgoJTWFpbnRhaW4gVENCX0NMT05FX1RIUkVBRCBhbmQgVENCX0NMT05FX0RFVEFDSEVEIGZsYWdzIGFuZCBjb3VudHMuCgkoaW50ZXJuYWxfd2FpdCkgW1RDQl9DTE9ORV9USFJFQURdOiBGYWN0b3Igb3V0IGRldGFjaGVkIGNoaWxkcmVuIHdoZW4KCWRldGVybWluaW5nIGlmIHdlIGhhdmUgYW55LiAgSWYgVENCX0NMT05FX1RIUkVBRCBpcyBzZXQsIGNoZWNrCglwYXJlbnQncyBjaGlsZHJlbiBpbnN0ZWFkIG9mIG91ciBvd24sIGFuZCBidW1wIG5jbG9uZV93YWl0aW5nIGNvdW50LgoJKGludGVybmFsX2V4aXQpIFtfX05SX2V4aXRfZ3JvdXBdOiBTZXQgdGhlIFRDQl9HUk9VUF9FWElUSU5HIGZsYWcgaWYKCXRoZSBzeXNjYWxsIHdhcyBleGl0X2dyb3VwLgoJKiBzeXNjYWxsLmMgKGludGVybmFsX3N5c2NhbGwpOiBVc2UgaW50ZXJuYWxfZXhpdCBmb3IgZXhpdF9ncm91cC4KCSogc3RyYWNlLmMgKHBpZDJ0Y2IpOiBObyBsb25nZXIgc3RhdGljLgoJKGFsbG9jdGNiKSBbVENCX0NMT05FX1RIUkVBRF06IEluaXRpYWxpemUgbmV3IGZpZWxkcy4KCShkcm9wdGNiKSBbVENCX0NMT05FX1RIUkVBRF06IE1haW50YWluIG5ldyBmaWVsZHMuCglJZiB3ZSBoYXZlIHRocmVhZCBjaGlsZHJlbiwgc2V0IFRDQl9FWElUSU5HIGFuZCBkb24ndCBjbGVhciB0aGUgVENCLgoJKHJlc3VtZSkgW1RDQl9DTE9ORV9USFJFQURdOiBEZWNyZW1lbnQgcGFyZW50J3MgbmNsb25lX3dhaXRpbmcuCgkoZGV0YWNoKSBbVENCX0NMT05FX1RIUkVBRF06IFdoZW4gY2FsbGluZyByZXN1bWUsIGNoZWNrIGFsbCB0aHJlYWQKCWNoaWxkcmVuIG9mIG91ciBwYXJlbnQgdGhhdCBtaWdodCBiZSB3YWl0aW5nIGZvciB1cyB0b28uCglbVENCX0dST1VQX0VYSVRJTkddIChoYW5kbGVfZ3JvdXBfZXhpdCk6IE5ldyBmdW5jdGlvbi4KCSh0cmFjZSkgW1RDQl9HUk9VUF9FWElUSU5HXTogVXNlIHRoYXQgaW4gcGxhY2Ugb2YgZGV0YWNoIG9yIGRyb3B0Y2IuCgoJUmV2YW1wIC1mIHN1cHBvcnQgZm9yIExpbnV4LgoJKiB1dGlsLmMgW0xJTlVYXSAoc2V0YnB0LCBjbGVhcmJwdCk6IE5ldyBpbXBsZW1lbnRhdGlvbnMgdGhhdCB0d2VhawoJdGhlIHN5c3RlbSBjYWxsIHRvIGJlIGNsb25lIHdpdGggQ0xPTkVfUFRSQUNFIHNldC4gIFZhcmlvdXMgbmV3IHN0YXRpYwoJaGVscGVyIGZ1bmN0aW9ucy4KCSogcHJvY2Vzcy5jIChpbnRlcm5hbF9jbG9uZSk6IERlZmluZSBhbHNvICNpZmRlZiBTWVNfY2xvbmUyLgoJSW5pdGlhbGl6ZSBUQ1BDSElMRC0+cGFyZW50IGZpZWxkLgoJW0NMT05FX1BUUkFDRV06IERvbid0IGRvIFBUUkFDRV9BVFRBQ0ggaGVyZSwgYmVjYXVzZSBpdCdzIHByZWF0dGFjaGVkLgoJQ2hlY2sgaW4gY2FzZSB0aGUgbmV3IGNoaWxkIGlzIGluIHRoZSB0Y2IgYWxyZWFkeS4KCShpbnRlcm5hbF9mb3JrKSBbTElOVVhdOiBKdXN0IGNhbGwgaW50ZXJuYWxfY2xvbmUuCgkqIHN0cmFjZS5jICh0cmFjZSkgW0xJTlVYXTogVW5kZXIgLWYvLUYsIGdyb2sgYW4gdW5rbm93biBwaWQKCXJlcG9ydGluZyB0byB3YWl0LCBwdXQgaXQgaW4gdGhlIFRDQiB3aXRoIFRDQl9BVFRBQ0hFRHxUQ0JfU1VTUEVOREVELgoKCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQxLmggKHN5c19vbGRsc3RhdCk6ICNkZWZpbmUgYXMgcHJpbnRhcmdzLgoKCSogZmlsZS5jIFtMSU5VWF06ICN1bmRlZiBzdF9bYW1jXXRpbWUgaW4gY2FzZSB0aGV5IGFyZSBtYWNyb3MuCgoJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogTmV3IHZhcmlhYmxlLCBkZWZpbmUgdG8gJChXQVJORkxBR1MpLgoKCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBSZW1vdmUgZGViaWFuL3Bvc3RpbnN0IGFuZCBkZWJpYW4vcHJlcm0uCgoyMDAzLTAxLTA5ICBXaWNoZXJ0IEFra2VybWFuICA8d2ljaGVydEBkZWVwaGFja21vZGUub3JnPgoKCSogZGViaWFuL3Bvc3RpbnN0LCBkZWJpYW4vcHJlcm06IHJlbW92ZWQsIC91c3IvZG9jIHN5bWxpbmsgaXMgbm8KCWxvbmdlciB1c2VkCgkqIGRlYmlhbi9ydWxlczogbm8gbG9uZ2VyIGluc3RhbGwgcG9zdGluc3QgYW5kIHByZXJtCgkqIGRlYmlhbi9jb250cm9sOiBkbyBub3QgZW5kIHN1bW1hcnkgd2l0aCBmdWxsIHN0b3AgKGxpbnRpYW4pCgoyMDAyLTEyLTMwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogTWFrZWZpbGUuYW0gKGJpbl9TQ1JJUFRTKTogTmV3IHZhcmlhYmxlLCBsaXN0IHN0cmFjZS1ncmFwaC4KCShFWFRSQV9ESVNUKTogQWRkIG1pc3NpbmcgZmlsZXMuCgoJKiBjb25maWd1cmUuYWM6IEZpeCBhc20vc2lnY29udGV4dC5oIGNoZWNrIHRvIGluY2x1ZGUgcHJlcmVxdWlzaXRlLgoKCSogc3lzY2FsbC5jIChxdWFsaWZ5X29uZSk6IE5ldyBmdW5jdGlvbi4KCShxdWFsX29wdGlvbnMpOiBSZXBsYWNlIGxvb2t1cCBmaWVsZCB3aXRoIHF1YWxpZnksIHVwZGF0ZSBpbml0aWFsaXplci4KCShxdWFsaWZ5KTogVXBkYXRlIGNhbGxlci4KCShxdWFsX3NpZ25hbCwgcXVhbF9mYXVsdCwgcXVhbF9kZXNjKTogUmV3cml0dGVuIGZyb20gbG9va3VwXyouCgkocXVhbF9zeXNjYWxsKTogUmV3cml0dGVuIGxvb2t1cF9zeXNjYWxsLCBtYXRjaCBuYW1lIG1vcmUgdGhhbiBvbmNlLgoJRml4ZXMgUkgjNzA1NzksIGJpdGVzIElBNjQgLWVmb28gd2hlbiBmb28gZXhpc3RzIG9uIElBMzIuCgoJKiB2ZXJzaW9uLmMgKHZlcnNpb24pOiBNYWtlIGNvbnN0LCBidW1wIHRvIDQuNC45MC4KCSogc3RyYWNlLmM6IFVwZGF0ZSBkZWNsLgoKCSogTWFrZWZpbGUuYW0gW0xJTlVYICYmIFg4Nl82NF06IFJlbW92ZSBjcnVmdC4KCSogbGludXgveDg2XzY0L2Vycm5vZW50MS5oOiBOZXcgZmlsZS4KCSogbGludXgveDg2XzY0L2lvY3RsZW50MS5oOiBOZXcgZmlsZS4KCSogbGludXgveDg2XzY0L3NpZ25hbGVudDEuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50MS5oOiBOZXcgZmlsZS4KCSogbGludXgveDg2XzY0L2kzODYtaGVhZGVycy5kaWZmOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L3g4Nl82NC9tYWtlaGVhZGVycy5zaDogRmlsZSByZW1vdmVkLgoJKiBsaW51eC94ODZfNjQvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaCBbWDg2XzY0XTogRGlzYWJsZSBzYW5pdHkgY2hlY2tzLCBzdWJjYWxsIHN0dWZmIGlzCglhbHJlYWR5IGJyb2tlbiBmb3IgMzItYml0IHBlcnNvbmFsaXR5IG9uIHg4Ni02NC4KCjIwMDItMTItMjkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE1ha2VmaWxlLmFtOiBQdW50IHN1YmRpcnMsIGhhbmRsZSBldmVyeXRoaW5nIGhlcmUuCgkqIGxpbnV4L01ha2VmaWxlLmFtOiBGaWxlIHJlbW92ZWQuCgkqIGZyZWVic2QvTWFrZWZpbGUuYW06IEZpbGUgcmVtb3ZlZC4KCSogc3Vub3M0L01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIHN2cjQvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCgkqIGxpbnV4L2FscGhhL01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L2hwcGEvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCSogbGludXgvaWE2NC9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoJKiBsaW51eC9wb3dlcnBjL01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L3MzOTAvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCSogbGludXgvczM5MHgvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCjIwMDItMTItMjYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXNjYWxsZW50LnNoOiBHcm9rIHRocmVlIGZsYXZvcnMgb2YgI2RlZmluZSBsaW5lLCB1bmlxdWlmeS4KCSogbGludXgvaHBwYS9zeXNjYWxsZW50LnNoOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5zaDogRmlsZSByZW1vdmVkLgoKCSogbGludXgvTWFrZWZpbGUuYW06IE5ldyBmaWxlLgoJKiBsaW51eC9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoJKiBmcmVlYnNkL01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KCSogZnJlZWJzZC9pMzg2L01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KCSogZnJlZWJzZC9pMzg2L01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgoyMDAyLTEyLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCVVwZGF0ZSB0byBBdXRvY29uZiAyLjU3LCBhbmQgQXV0b21ha2lmeSB3aXRoIHZlcnNpb24gMS43LgoJKiBNYWtlZmlsZS5hbTogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIGNvbmZpZ3VyZS5pbjogTW92ZWQgdG8gLi4uCgkqIGNvbmZpZ3VyZS5hYzogLi4uIGhlcmUuICBVcGRhdGUgZm9yIEF1dG9jb25mIDIuNXggYW5kIEF1dG9tYWtlLgoJKiBhY2xvY2FsLm00OiBNb3ZlZCB0byAuLi4KCSogYWNpbmNsdWRlLm00OiAuLi4gaGVyZS4gIFVwZGF0ZSBmb3IgQXV0b2NvbmYgMi41eC4KCSogYWNjb25maWcuaDogRmlsZSByZW1vdmVkLgoJKiBBVVRIT1JTOiBOZXcgZmlsZSwgbWFrZXMgYXV0b21ha2UgaGFwcHkuCgkqIGF1dG9nZW4uc2g6IEZpbGUgcmVtb3ZlZC4KCSogUkVBRE1FLUNWUzogVXBkYXRlIHRvIHJlY29tbWVuZCBhdXRvcmVjb25mIGluc3RlYWQuCgkqIGZpbGUuYzogSEFWRV9TVF8qIC0+IEhBVkVfU1RSVUNUX1NUQVRfU1RfKi4KCSogbmV0LmM6IEhBVkVfU0lONl9TQ09QRV9JRCAtPiBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCwKCUhBVkVfTVNHX0NPTlRST0wgLT4gSEFWRV9TVFJVQ1RfTVNHSERSX01TR19DT05UUk9MLgoJKiBzdHJhY2UuYzogKl9ERUNMQVJFRCAtPiBIQVZFX0RFQ0xfKgoJKiBzdHJlYW0uYzogSEFWRV8qIC0+IEhBVkVfU1RSVUNUXyoKCgkqIGxpbnV4L01ha2VmaWxlLmluIChpb2N0bGRlZnMuaCBpb2N0bHMuaCk6IFVzZSAkKFNIRUxMKSBpbnN0ZWFkIG9mCglzaCwgYW5kIHVzZSAkKHNyY2RpcikgdG8gZmluZCB0aGUgc2NyaXB0LgoJKiBsaW51eC9wb3dlcnBjL01ha2VmaWxlLmluIChpb2N0bGVudC5yYXcpOiBGaW5kIGlvY3RsZW50LnNoIGluIC4uLy4KCShpb2N0bHNvcnQubyk6IFVzZSAuLi9pb2N0bHNvcnQuYywgbm90IC4uLy4uL2lvY3Rsc29ydC5jLgoJKiBsaW51eC94ODZfNjQvTWFrZWZpbGUuaW4gKGhlYWRlcnMpOiBSZW5hbWVkIHRvIGFsbC4KCSogbGludXgvYWxwaGEvTWFrZWZpbGUuaW46IEFkZCBlbXB0eSBpbnN0YWxsIHRhcmdldC4KCSogbGludXgveDg2XzY0L01ha2VmaWxlLmluOiBMaWtld2lzZS4KCSogbGludXgvcG93ZXJwYy9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCgkqIGxpbnV4L01ha2VmaWxlLmluOiBMaWtld2lzZS4KCjIwMDItMTItMjYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBkZWZzLmggW0xJTlVYICYmIE1JUFNdIChNQVhfUVVBTFMpOiBTZXQgdG8gNTAwMCwgbm90IDQ5OTkuCglGcm9tIERhbmllbCBKYWNvYm93aXR6IDxkcm93QGZhbHNlLm9yZz4uCgoyMDAyLTEyLTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvc3lzY2FsbGVudC5oOiBBZGQgc29tZSBuZXcgMi41IHN5c2NhbGwgbmFtZXMuCglOb3cgY2xvbmUgdGFrZXMgNSBhcmdzLgoJKiBwcm9jZXNzLmMgW0xJTlVYXSAoY2xvbmVfZmxhZ3MpOiBVcGRhdGUgd2l0aCAyLjUgZmxhZyBiaXRzLgoJW0xJTlVYXSAoc3lzX2Nsb25lKTogUHJpbnQgbmV3IGFyZ3MuCgkqIG1lbS5jIChwcmludF9sZHRfZW50cnkpOiBNYWtlIGdsb2JhbC4KCgkqIGxpbnV4L3N5c2NhbGwuaCBbSTM4NiB8fCBJQTY0XSAoU1lTX3NvY2tldF9zdWJjYWxsKTogQnVtcCB0byAzMDAgZm9yCglzYWZldHksIHNpbmNlIHVwIHRvIDI2MCBhcmUgYWxyZWFkeSB1c2VkIGluIDIuNSBrZXJuZWxzLgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSB0aGUgdGFibGUuCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCgkqIHN5c2NhbGwuYyAoZm9yY2VfcmVzdWx0KTogTmV3IGZ1bmN0aW9uLgoJKiBwcm9jZXNzLmMgKGludGVybmFsX3dhaXQpOiBIYW5kbGUgRUNISUxEIGV4aXQgZnJvbSB3YWl0IGNhbGwgd2l0aAoJV05PSEFORyBmbGFnIHNldDsgZm9yY2UgdGhlIHJldHVybiB2YWx1ZSB0byAwIGluIHRoZSBpbmZlcmlvciB3aGVuIGl0CgloYXMgbGl2ZSBjaGlsZHJlbiB3ZSBhcmUgdHJhY2luZy4KCSogTkVXUzogTWVudGlvbiB0aGUgYnVnIGZpeC4KCjIwMDItMTItMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogUmVtb3ZlIHBsYWNlaG9sZGVycyAyNzUtMjk4IHRvIGNhdGNoIHVwCgl3aXRoIGxpbnV4L3N5c2NhbGxlbnQuaCBhZGRpdGlvbnMuCgoJKiBzdHJhY2UuYyAodGNidGFiKTogTWFrZSB0aGlzIGEgcG9pbnRlciB0byBwb2ludGVycywgbm90IGFuIGFycmF5LgoJKHRjYnRhYnNpemUpOiBOZXcgdmFyaWFibGUuCgkobWFpbik6IEluaXRpYWxpemUgdGhlbSB1c2luZyBkeW5hbWljIGFsbG9jYXRpb24uCgkoYWxsb2N0Y2IsIG1haW4pOiBVc2UgdGNidGFic2l6ZSBpbiBwbGFjZSBvZiBNQVhfUFJPQ1M7IGluZGlyZWN0LgoJKHBpZDJ0Y2IsIGNsZWFudXApOiBMaWtld2lzZS4KCVtVU0VfUFJPQ0ZTXSAocG9sbHYpOiBNYWtlIHRoaXMgYSBwb2ludGVyLCBub3QgYW4gYXJyYXk7IG1ha2Ugc3RhdGljLgoJKHJlYnVpbGRfcG9sbHYpOiBEeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgdmVjdG9yLgoJKiBkZWZzLmggKHRjYnRhYik6IFVwZGF0ZSBkZWNscy4KCShNQVhfUFJPQ1MpOiBNYWNybyByZW1vdmVkLCBubyBtb3JlIHN0YXRpYyBsaW1pdCBvbiB0aGlzLgoJKiBwcm9jZXNzLmMgKGZvcmtfdGNiKTogTmV3IGZ1bmN0aW9uLgoJKGludGVybmFsX2Nsb25lLCBpbnRlcm5hbF9mb3JrKTogVXNlIGl0IGluc3RlYWQgb2YgY2hlY2tpbmcgbnByb2NzLgoKCSogc3RyYWNlLmMgKGRldGFjaCkgW0xJTlVYXTogVXNlIF9fV0FMTCAob3IgYSBzZWNvbmQgdHJ5IHdpdGggX19XQ0xPTkUpCglpbiB3YWl0IGFmdGVyIHNlbmRpbmcgU0lHU1RPUC4KCjIwMDItMTItMTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzaWduYWwuYyAoc3ByaW50c2lnbWFzayk6IEluY3JlYXNlIHN0YXRpYyBidWZmZXIgc2l6ZSB0byBhY2NvdW50IGZvcgoJd29yc3QgcG9zc2libGUgY2FzZS4gIFJlcG9ydGVkIGJ5IERhbmllbCBKYWNvYm93aXR6IDxkcm93QGZhbHNlLm9yZz4uCgoJKiBwcm9jZXNzLmMgW0xJTlVYXSAod2FpdDRfb3B0aW9ucyk6IEZpeCBfX1dDTE9ORSB2YWx1ZS4gIEFkZAoJX19XTk9USFJFQUQgYW5kIF9fV0FMTC4KCgkqIHN0cmFjZS5jICh0cmFjZSkgW0xJTlVYXTogT25seSBjaGVjayBlcnJubyBpZiB3YWl0NCBhY3R1YWxseSBmYWlscywKCXNvIHdlIGRvbid0IHJlcGVhdCBhIHdhaXQgYW5kIHRodXMgZHJvcCBhIHN0YXR1cy4gIEZpeGVzIFJIIzYyNTkxLgoKMjAwMi0xMi0xNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHByb2Nlc3MuYyAoc2V0YXJnKSBbUE9XRVJQQ106IFN1cHBvcnQgaXQuCgoJKiB1dGlsLmMgW1BPV0VSUENdIChMT09QKTogRml4IHZhbHVlLCBub3cgMHg0ODAwMDAwMCAoMDogYiAwYikuCglPbGQgdmFsdWUgd2FzIGJvZ3VzLCBub3QgZXZlbiBhIHByb3BlciBpbnN0cnVjdGlvbi4KCUZyb20gR3V5IE0uIFN0cmVldGVyIDxzdHJlZXRlckByZWRoYXQuY29tPi4KCgkqIHN0cmFjZS5jIChtYWluKSBbISBVU0VfUFJPQ0ZTXTogQWx3YXlzIHJlc2V0IFNJR0NITEQgdG8gU0lHX0RGTC4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY2hlY2sgZm9yIHB1dHBtc2cuCgkqIHN0cmVhbS5jIChzeXNfZ2V0cG1zZywgc3lzX3B1dHBtc2cpOiBNYWtlIHRoZXNlIGNvbmRpdGlvbmFsIG9uCgkjaWZkZWYgU1lTXyosIHJhdGhlciB0aGFuIG9uIEhBVkVfUFVUUE1TRy4KCgkqIGFjbG9jYWwubTQgKEFDX1NUQVQ2NCk6IEluY2x1ZGUgPGxpbnV4L3R5cGVzLmg+IGJlZm9yZSA8YXNtL3N0YXQuaD4KCWluIHRlc3QuICBUZXN0IG91ciBvd24gI2lmZGVmIExJTlVYIHJhdGhlciB0aGFuIHByZWRlZmluZWQgYGxpbnV4Jy4KCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBVc2Ugc3lzX2xsc2VlayBmb3IgX2xsc2Vlay4KCSogbGludXgvc3BhcmMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvaHBwYS9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoKCSogc3lzY2FsbC5jIChzeXNjYWxsX2VudGVyKSBbTElOVVggJiYgUE9XRVJQQ106IERlZmluZSBQVF9PUklHX1IzIGlmCglub3QgZGVmaW5lZCwgc2luY2UgPGFzbS9wdHJhY2UuaD4gZGVmaW5lcyBpdCBvbmx5ICNpZmRlZiBfX0tFUk5FTF9fLgoJKiBwcm9jZXNzLmM6IExpa2V3aXNlLgoKCSogZGVzYy5jIChzeXNfb3NmX3NlbGVjdCk6IEFkZCBtaXNzaW5nIHJldHVybiB0eXBlLgoKCSogc3lzY2FsbC5jICh0cmFjZV9zeXNjYWxsKTogVXNlIHN0cmVycm9yLCBub3Qgc3lzX2Vycmxpc3Qvc3lzX25lcnIuCgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogUmVtb3ZlIG1hY3JvcyBmb3Igc3lzX2RlbGV0ZV9tb2R1bGUsCglzeXNfbmFub3NsZWVwLCBib3RoIGFscmVhZHkgaW4gbGludXgvZHVtbXkuaC4KCgkqIHN5c2NhbGwuYyAoZ2V0X3Njbm8pOiBNb3ZlIHN0YXRpYyBgY3VycnBlcnMnIGluc2lkZSAjaWZkZWYgWDg2XzY0LgoJKHRyYWNlX3N5c2NhbGwpOiBGaXggcmV0dXJuIHdpdGhvdXQgdmFsdWUuCgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSB0YWJsZSB3aXRoIG5hbWVzIG9mIG5ldyBzeXNjYWxscwoJaW9fc2V0dXAsIGlvX2Rlc3Ryb3ksIGlvX2dldHZlbnRzLCBpb19zdWJtaXQsIGlvX2NhbmNlbC4KCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgoJKiBzaWduYWwuYyBbTElOVVggJiYgSTM4Nl06IFByb3ZpZGUgU0FfUkVTVE9SRVIgY29uc3RhbnQgaWYgbm90CglkZWZpbmVkLiAgSWYgdGhlIGJpdCBpcyBzZXQsIHByaW50IHRoZSBzYV9yZXN0b3JlciBmaWVsZCBvZiBzaWdhY3Rpb24uCgoJKiBtZW0uYzogQWRkIHN5c197Z2V0LHNldH1fdGhyZWFkX2FyZWEuCgkqIGxpbnV4L3N5c2NhbGwuaDogRGVjbGFyZSB0aGVtLgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSB0aGUgdGFibGUgZm9yIHRoZXNlLgoJKiBsaW51eC9kdW1teS5oIChzeXNfbW9kaWZ5X2xkdCk6IERlZmluZSBvbmx5ICNpZm5kZWYgSTM4Ni4KCShzeXNfZ2V0X3RocmVhZF9hcmVhLCBzeXNfc2V0X3RocmVhZF9hcmVhKTogTmV3IG1hY3JvcyAjaWZuZGVmIEkzODYuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBsaW51eC94YXR0ci5oIGFuZCBsaW51eC9mdXRleC5oIGhlYWRlcnMuCgkqIGxpbnV4L3N5c2NhbGwuaDogQWRkIHN5c18qIGRlY2xzIGZvciBuZXcgc3lzY2FsbHMgZ2V0cG1zZywgcHV0cG1zZywKCXJlYWRhaGVhZCwgc2VuZGZpbGU2NCwgc2V0eGF0dHIsIGZzZXR4YXR0ciwgZ2V0eGF0dHIsIGZnZXR4YXR0ciwgaW50CglsaXN0eGF0dHIsIGZsaXN0eGF0dHIsIHJlbW92ZXhhdHRyLCBmcmVtb3ZleGF0dHIsIHNjaGVkX3NldGFmZmluaXR5LAoJc2NoZWRfZ2V0YWZmaW5pdHksIGZ1dGV4LgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSB0aGUgdGFibGUuCgkqIGlvLmM6IEFkZCBzeXNfc2VuZGZpbGU2NC4KCSogZmlsZS5jOiBBZGQgc3lzX3JlYWRhaGVhZCwgc3lzXyp4YXR0ci4KCSogcHJvY2Vzcy5jOiBBZGQgc3lzX2Z1dGV4LCBzeXNfKmFmZmluaXR5LgoKCSogbGludXgvc3lzY2FsbC5oIChTWVNfc29ja2V0X3N1YmNhbGwpOiBEZWZpbmUgdG8gMjU2IG9uIGFsbCBtYWNoaW5lcy4KCShTWVNfaXBjX3N1YmNhbGwpOiBBbHdheXMgU1lTX3NvY2tldF9zdWJjYWxsICsgU1lTX3NvY2tldF9uc3ViY2FsbHMuCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXBkYXRlIHRoZSB0YWJsZSBmb3Igc29ja2V0IGFuZCBpcGMgc3ViY2FsbHMuCgoyMDAyLTExLTA5ICBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4KCglCdWdmaXggZm9yIHMzOTAvczM5MHg6CgkqIHN5c2NhbGwuYzogRml4ZWQgc2NubyBkZXJpdmF0aW9uIGZvciBzMzkwL3MzOTB4LgoKMjAwMi0xMS0wNiAgTWljaGFsIEx1ZHZpZyAgPG1sdWR2aWdAc3VzZS5jej4KCglNZXJnZWQgcGF0Y2ggZnJvbSBTdGV2ZW4gSi4gSGlsbCA8c2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbT4KCXRvIGFsbG93IHRoZSBjb21waWxhdGlvbiBvZiBhIG5hdGl2ZSBNSVBTIHN0cmFjZS4KCjIwMDItMTEtMDYgIE1pY2hhbCBMdWR2aWcgIDxtbHVkdmlnQHN1c2UuY3o+CgoJRnJvbSBNYXJ0eSBMZWlzbmVyIDxsZWlzbmVyQHJvY2hlc3Rlci5yci5jb20+LAoJcmV3cml0dGVuIGJ5IG1sdWR2aWc6CgkqIHN0cmFjZS5jIChub3RfZmFpbGluZ19vbmx5KTogTmV3LgoJKHVzYWdlKTogQWRkZWQgLXogc3dpdGNoIGRlc2NyaXB0aW9uLgoJKG1haW4pOiBBZGRlZCAteiBzd2l0Y2ggcGFyc2luZyB0byBub3RfZmFpbGluZ19vbmx5IHZhcmlhYmxlLgoJKiBzeXNjYWxsLmMgKHRyYWNlX3N5c2NhbGwpOiBBZGRlZCBub3RfZmFpbGluZ19vbmx5IGhhbmRsaW5nLgoKMjAwMi0xMC0wOCAgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CgoJTWlzc2luZyBjb21wbGV0ZSBjaGFuZ2Vsb2cgZm9yIDIwMDItMTAtMDcgY29tbWl0OgoJKiBNYWtlZmlsZS5pbjogQWRkZWQgbGludXgvczM5MCwgbGludXgvczM5MHggdG8gQUxMX1NVQkRJUlMuCgkqIGFjY29uZmlnLmg6IE5ldyBkZWZpbmUgZm9yIHMzOTB4LgoJKiBjb25maWcuc3ViOiBBZGRlZCBtaXNzaW5nIGRlZmluZSBmb3IgczM5MCBhbmQgbmV3IG9uZSBmb3IgczM5MHguCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgbmV3IGRlZmluZSBmb3IgczM5MHguCgkqIGZpbGUuYzogQWRkZWQgbWlzc2luZyAjdW5kZWYgZGlyZW50NjQgYW5kIG5ldyBkZWZpbmVzIGZvciBzMzkweC4KCSogbGludXgvczM5MDogTmV3IGRpcmVjdG9yeS4KCSogbGludXgvczM5MC9NYWtlZmlsZS5pbjogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTAvZXJybm9lbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTAvaW9jdGxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTAvc2lnbmFsZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zMzkwL3N5c2NhbGxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTB4OiBOZXcgZGlyZWN0b3kuCgkqIGxpbnV4L3MzOTB4L01ha2VmaWxlLmluOiBOZXcgZmlsZS4KCSogbGludXgvczM5MHgvZXJybm9lbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTB4L2lvY3RsZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zMzkweC9zaWduYWxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTB4L3N5c2NhbGxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3N5c2NhbGwuaDogQWRkZWQgc3lzX21pbmNvcmUoKSBwcm90b3R5cGUgYW5kIGFkZGVkIG5ldwoJczM5MHggZGVmaW5lcy4KCSogcHJvY2Vzcy5jOiBBZGRlZCBzMzkweCBkZWZpbmVzLgoJKGNoYW5nZV9zeXNjYWxsKTogQ2hhbmdlZCBoYW5kbGluZyBmb3IgczM5MC4KCShzZXRhcmcpOiBBZGRlZCBtaXNzaW5nIHMzOTAvczM5MHggY29kZSBpbiBzZXRhcmcoKS4KCSogc2lnbmFsLmM6IEFkZGVkIHMzOTB4IGRlZmluZS4KCShzeXNfc2lncmV0dXJuKTogQnVnZml4IGluIHMzOTAvczM5MHggY29kZSAod3JvbmcgbnVtYmVyIG9mCglhcmd1bWVudHMgdG8gc3ByaW50c2lnbWFzaygpKS4KCSogc3RyZWFtLmMgKGludGVybmFsX3N0cmVhbV9pb2N0bCk6IENoYW5nZWQgaW50IGNhc3QgdG8gbG9uZyBjYXN0LAoJc2luY2UgcHJpbnRzdHIoKSBleHBlY3RzIGEgbG9uZy4KCSogc3lzY2FsbC5jIChkZWNvZGVfc3ViY2FsbCk6IENoYW5nZWQgc2V2ZXJhbCB2YXJpYWJsZXMgdG8gYmUgbG9uZwoJaW5zdGVhZCBvZiBpbnQgdG8gbWF0Y2ggNjQgYml0IHJlcXVpcmVtZW50cy4gQWRkZWQgczM5MHggZGVmaW5lcy4KCShzeXNjYWxsX2VudGVyKTogQ2hhbmdlZCB1cGVlaygpIGNhbGwgdG8gbWF0Y2ggczM5MCBhbmQgczM5MHgKCXJlcXVpcmVtZW50cy4KCSogdXRpbC5jOiBBZGRlZCBzMzkweCBkZWZpbmVzLgoKMjAwMi0xMC0wNyAgTWljaGFsIEx1ZHZpZyAgPG1sdWR2aWdAc3VzZS5jej4KCglNZXJnZWQgczM5MHggcG9ydCBieSBIZWlrbyBDYXJzdGVucyA8SGVpa28uQ2Fyc3RlbnNAZGUuaWJtLmNvbT4KCWFuZCBidWdmaXhlcyB0byBzMzkwIGJ5IEQuSi4gQmFycm93LgoKMjAwMi0wOS0yMyAgTWljaGFsIEx1ZHZpZyAgPG1sdWR2aWdAc3VzZS5jej4KCglNZXJnZWQgeDg2LTY0IHBvcnQgYnkgQW5kaSBLbGVlbiA8YWtAc3VzZS5kZT4KCWFuZCBNaWNoYWwgTHVkdmlnIDxtbHVkdmlnQHN1c2UuY3o+CgkqIE1ha2VmaWxlLmluOiBOZXcgdGFyZ2V0ICdoZWFkZXJzJy4gRmFpbHVyZSBpZ25vcmVkLgoJKiBhY2NvbmZpZy5oOiBOZXcgZGVmaW5lcyBmb3IgeDg2LTY0LgoJKiBjb25maWd1cmUuaW46IERpdHRvLgoJKiBkZWZzLmg6IERpdHRvLgoJKiBmaWxlLmM6IERpdHRvLgoJKiBzaWduYWwuYzogRGl0dG8uCgkqIHByb2Nlc3MuYzogQWRkZWQgc3VwcG9ydCBmb3IgeDg2LTY0LgoJKiB1dGlsLmM6IERpdHRvLgoJKiBzeXNjYWxsLmM6IERpdHRvICsgYWRkZWQgYXV0b21hdGljIHBlcnNvbmFsaXR5IHN3aXRjaGluZy4KCSogbGludXgvc3lzY2FsbC5oOiBEaXR0by4KCSogbGludXgveDg2XzY0OiBOZXcgZGlyZWN0b3J5LgoJKiBsaW51eC94ODZfNjQvTWFrZWZpbGUuaW46IE5ldyBmaWxlLgoJKiBsaW51eC94ODZfNjQvZ2VudGFiLnBsOiBEaXR0by4KCSogbGludXgveDg2XzY0L2kzODYtaGVhZGVycy5kaWZmOiBEaXR0by4KCSogbGludXgveDg2XzY0L21ha2VoZWFkZXJzLnNoOiBEaXR0by4KCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogRGl0dG8uCgkqIG1lbS5jIChwcmludF9tbWFwKTogQWx3YXlzIHByaW50IGFyZ1s0XSBhcyBpbnQuCgoyMDAyLTA5LTIzICBNaWNoYWwgTHVkdmlnICA8bWx1ZHZpZ0BzdXNlLmN6PgoKCSogY29uZmlndXJlLmluOiBGaXggcmVndWxhciBleHByZXNzaW9ucy4KCSogbGludXgvc3lzY2FsbC5oOiBBZGRlZCBtaXNzaW5nIGJyYWNlcyBpbiBwcm90b3R5cGUgb2YKCXN5c19nZXRkZW50czY0KCkuCgkqIGZpbGUuYzogVXNlICcjaWZkZWYgTElOVVgnIGluc3RlYWQgb2YgJyNpZmRlZiBsaW51eCcuCgkoc3RydWN0IGZpbGVmbGFncyk6IE1hZGUgZXh0ZXJuIHRvIGluaGliaXQgY29tcGlhdGlvbiB3YXJuaW5ncy4KCShzeXNfZ2V0ZGVudHM2NCk6IE1lcmdlZCBMSU5VWCBhbmQgU1ZSNCBwYXJ0LgoJKiBzeXNjYWxsLmMgKGdldF9zY25vKTogU3BsaXQgbXVsdGlsaW5lIHN0cmluZyBpbnRvIHR3byBkaXN0aW5jdAoJc3RyaW5ncy4KCjIwMDItMDUtMjQgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHN0cmVhbS5oLCBuZXQuaDogQXZvaWQgcG9zc2libGUgaW5maW5pdGUgbG9vcCBjYXVzZWQgYnkKCXVuc2lnbmVkIGFyaXRobWV0aWMgaW4gcHJlY2VlZGluZyBjaGFuZ2UuCgoyMDAyLTA1LTIzICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBhY2NvbmZpZy5oOiBBZGQgSEFWRV9PUFRIRFIgYW5kIEhBVkVfVF9PUFRIRFIgZGVmaW5lcy4KCgkqIGFjbG9jYWwubTQ6IEFkZCB0ZXN0cyBmb3Igc3RydWN0IG9wdGhkciBpbiBzeXMvc29ja2V0LmggYW5kCglzdHJ1Y3QgdF9vcHRoZHIgaW4gc3lzL3RpdXNlci5oLCBkZWZpbmUgSEFWRV9PUFRIRFIgYW5kIEhBVkVfVF9PUFRIRFIKCWlmIGZvdW5kLgoKCSogY29uZmlndXJlLmluOiB1c2UgdGVzdHMgZm9yIHN0cnVjdCBvcHRoZHIgYW5kIHN0cnVjdCB0X29wdGhkci4KCgkqIGRlZnMuaDogYWRkIG5ldyBmdW5jdGlvbiBwcmludF9zb2NrX29wdG1nbXQuCgoJKiBpby5jOiBhZGQgaGFjayB0aGF0IGxldHMgaW9jdGwgZGVjb2RlIGZ1bmN0aW9ucyBzZXQgYXV4aWxsaWFyeQoJc3RyaW5nIHJldHVybi4KCgkqIHN0cmVhbS5jOiBiZXR0ZXIgZGVjb2RpbmcgZm9yIHRpbW9kIGlvY3Rscy4KCgkqIG5ldC5jOiBhZGQgZnVuY3Rpb24gcHJpbnRfc29ja19vcHRtZ210LCB1c2VkIGJ5IHRpbW9kIGlvY3RsCglkZWNvZGluZyBmdW5jdGlvbnMgaW4gc3RyZWFtLmMuCgoyMDAyLTA1LTIzICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBhY2NvbmZpZy5oOiBNYWtlIGF1dG9oZWFkZXIgaGFwcHkgYWJvdXQgTGludXgvU3VwZXJICgoyMDAyLTA1LTIzICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBzdHJhY2UuYzogR2V0IHJpZCBvZiB3YXJuaW5nIGlmIG5vdCB1c2luZyBQT0xMX0hBQ0sKCjIwMDItMDUtMjIgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIG5ldC5jOiBTaW1wbGlmeSB7Z2V0LHNldH1zb2Nrb3B0LCBkZWNvZGUgU09fTElOR0VSLCBjb3BlIHdpdGgKCW9wdGlvbnMgdGhhdCBhcmUgbm90IGp1c3QgaW50cywgY29wZSB3aXRoIHN5c3RlbXMgdGhhdCBkb24ndAoJI2RlZmluZSBTT0xfVENQIGFuZCBzbyBvbi4KCjIwMDItMDUtMjEgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHN0cmFjZS5jOiBGaXggd2FybmluZyBpZiBQT0xMX0hBQ0sgaXMgdXNlZC4KCjIwMDItMDUtMTcgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHN2cjQvaW9jdGxlbnQuc2g6IFNvbWUgZGVmaW5lcyBvbiBVVyBjb21lIHdpdGggdG9vIG1hbnkgc3BhY2VzLgoKMjAwMi0wNS0xNyAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogc3ZyNC9pb2N0bGVudC5zaDogQ29wZSB3aXRoICNkZWZpbmVzIHdyYXBwZWQgaW4gI2lmZGVmcy4KCjIwMDItMDUtMTcgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHN0cmVhbS5jOiB0aWR5IHVwIG91dHB1dCBhIGxpdHRsZS4KCjIwMDItMDUtMTcgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHByb2Nlc3MuYywgc3ZyNC9kdW1teS5oLCBzdnI0L3N5c2NhbGwuaDogZGVjb2RlIGFyZ3VtZW50cwoJdG8gcHJvY3ByaXYgc3lzY2FsbC4KCjIwMDItMDUtMDEgIFdpY2hlcnQgQWtrZXJtYW4gPHdpY2hlcnRAZGVlcGhhY2ttb2RlLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgZGVmcy5oLCBwcm9jZXNzLmMsIHNvY2suYywgc3lzY2FsbC5jLCB1dGlsLmM6IG1lcmdlCgkgIHBhdGNoIGZyb20gR3JlZyBCYW5rcyA8Z2JhbmtzQHBvY2tldHBlbmd1aW5zLmNvbT4gZm9yIExpbnV4L1N1cGVySAoJICBzdXBwb3J0CgoyMDAyLTA0LTAxICBXaWNoZXJ0IEFra2VybWFuIDx3aWNoZXJ0QGRlZXBoYWNrbW9kZS5vcmc+CgoJKiBzdHJhY2UuYzogY2xvc2UgdGNwLT5vdXRmIGluIGRyb3B0Y2IoKQoKMjAwMi0wNC0wMSAgV2ljaGVydCBBa2tlcm1hbiA8d2ljaGVydEBkZWVwaGFja21vZGUub3JnPgoKCSogbmV0LmM6IGRlY29kZSBwYWNrZXQgb3B0aW9ucwoKMjAwMi0wMy0zMSAgV2ljaGVydCBBa2tlcm1hbiA8d2ljaGVydEBkZWVwaGFja21vZGUub3JnPgoKCSogbGludXgve2FscGhhLGhwcGEsaWE2NCxtaXBzLHBvd2VycGMsc3BhcmN9L3N5c2NhbGxlbnQuaDogcmVnZW5lcmF0ZWQKCjIwMDItMDMtMzEgIFdpY2hlcnQgQWtrZXJtYW4gPHdpY2hlcnRAZGVlcGhhY2ttb2RlLm9yZz4KCgkqIGRlYmlhbi8qOiBhZGRlZAoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IGZpeCB0eXBvIGFuZCBhZGQgdGhlIHJlc2VydmVkIHN0cmVhbSBzeXNjYWxscwoJKiBkZWZzLmgsIGZpbGUuYywgaW8uYzogZml4IHNpZ25lZC91bnNpZ25lZCBpc3N1ZXMKCSogc3lzY2FsbC5jOiBjaGVjayBmb3IgbmVnYXRpdmUgdV9lcnJvcnMKCSogY3ZzYnVpbGQ6IHJlbmFtZWQgdG8gYXV0b2dlbi5zaAoKMjAwMS0xMi0xNyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCgkqIG5ldC5jOiBhZGQgbmV3IFRDUCBzb2NrZXQgb3B0aW9ucwoKMjAwMS0xMC0yNiAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogc3ZyNC9pb2N0bGVudC5zaDogQ29wZSB3aXRoICNkZWZpbmUgbGluZXMgY29udGFpbmluZwoJY29tbWVudHMgdGhhdCB0ZXJtaW5hdGUgb24gc3Vic2VxdWVudCBsaW5lcy4gIFVzZWQgdG8KCWNvbW1lbnQgb3V0IHN1YnNlcXVlbnQgaW9jdGxzIQoKMjAwMS0xMC0yNSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCgkqIGxpbnV4L2lvY3RsZW50Lmg6IHJlZ2VuZXJhdGVkIHVzaW5nIGN1cnJlbnQgc2NyaXB0cyBzbwoJICB0ZXJtIGlvY3RscyBhcmUgaW5jbHVkZWQKCjIwMDEtMTAtMTkgIEpvaG4gSHVnaGVzICA8am9obkBDYWx2YS5DT00+CgoJKiBzdHJhY2UuYyhwcm9jX29wZW4pOiBPbiBTVlI0IG9ubHkgdHJhY2UgdGhlIHN5c2NhbGxzLAoJc2lnbmFscyBhbmQgZmF1bHRzIHdlIGNhcmUgYWJvdXQuCgoyMDAxLTEwLTE4ICBKb2huIEh1Z2hlcyAgPGpvaG5AQ2FsdmEuQ09NPgoKCSogYWNjb25maWcuaDogQWRkIEhBU19TSUdJTkZPX1QuCgkqIGFjbG9jYWwubTQ6IGFkZCBjaGVjayBmb3Igc2lnaW5mb190IGluIHNpZ25hbC5oLgoJKiBjb25maWd1cmUuaW46IHVzZSBjaGVjayBmb3Igc2lnaW5mb190LgoJKiBkZWZzLmg6IGlmIEhBVkVfU0lHSU5GT19UIHRoZSBkZWNsYXJlIHByaW50c2lnaW5mby4gIE9uIFNWUjQKCSAgYWxsb3cgYWNjZXNzIHRvIHNpZ2luZm8gd2hlbiBzaWduYWwgcmVjaWV2ZWQuCgkqIHByb2Nlc3MuYzogUmVtb3ZlIFNWUjQgb25seSB2ZXJzaW9uIG9mIHByaW50c2lnaW5mby4KCSogc2lnbmFsLmM6IG1lcmdlIFNWUjQgYW5kIExJTlVYIHZlcnNpb25zIG9mIHByaW50c2lnaW5mby4KCSogc3RyYWNlLmM6IG9uIFNWUjQgcHJpbnQgc2lnaW5mbyB3aGVuIHNpZ25hbCByZWNpZXZlZC4KCjIwMDEtMTAtMTggIEpvaG4gSHVnaGVzICA8am9obkBDYWx2YS5DT00+CgoJKiBzeXN0ZW0uYyhzeXNfc3Npc3lzKTogaGFuZGxlIHJldHVybiB2YWx1ZXMgZm9yIHNzaXN5cwoKMjAwMS0xMC0xOCAgSm9obiBIdWdoZXMgIDxqb2huQENhbHZhLkNPTT4KCgkqIHNpZ25hbC5jOiBoYW5kbGUgc2lnd2FpdAoJKiBzdnI0L2R1bW15LmM6IE1vdmUgc2lnd2FpdCB0byBkb25lCgkqIHN2cjQvc3lzY2FsbC5oOiBoYW5kbGUgc2lnd2FpdAoKMjAwMS0xMC0xNiAgSm9obiBIdWdoZXMgIDxqb2huQENhbHZhLkNPTT4KCgkqIHN5c3RlbS5jKHN5c19zc2lzeXMpOiBkZWNvZGUgc29tZSBhcmdzIGZvciBzc2lzeXMuCgoyMDAxLTEwLTE2ICBKb2huIEh1Z2hlcyAgPGpvaG5AQ2FsdmEuQ09NPgoKCSogbWVtLmM6IE1TX1NZTkMgaXMgemVybywgc28gbXVzdCBiZSBmaXJzdCBpbiB4bGF0IGxpc3QuCgoJKiBzdnI0L2R1bW15Lmg6IG1lbWNudGwgaXMgbXVjaCBsaWtlIG1jdGwuCgoyMDAxLTEwLTE2ICBKb2huIEh1Z2hlcyAgPGpvaG5AQ2FsdmEuQ09NPgoKCSogdXRpbC5jICh1bW92ZXN0cik6IFVuaXhXYXJlIChzdnI0PykgcmV0dXJucyAwIHdoZW4gdHJ5aW5nCgl0byByZWFkIHVubWFwcGVkIHBhZ2UuICBNYWtlIGl0IHBvc3NpYmxlIHRvIHN0cmFjZSBrc2guCgoyMDAxLTEwLTAzICBEYXZpZCBNb3NiZXJnZXIgIDxkYXZpZG1AaHBsLmhwLmNvbT4KCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfY2xvbmUpOiBBdm9pZCByYWNlIGNvbmRpdGlvbiBieSBjbGVhcmluZwoJYnJlYWtwb2ludCBhZnRlciBhdHRhY2hpbmcgdG8gY2hpbGQuCgoyMDAxLTEwLTAyICBEYXZpZCBNb3NiZXJnZXIgIDxkYXZpZG1AaHBsLmhwLmNvbT4KCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBEZWZpbmUgaWEzMiBzeXNjYWxsIG51bWJlcnMgKG9yaWdpbmFsbHkKCWJ5IERvbiBEdWdnZXIsIHdpdGggbXkgcmVmaW5lbWVudHMpLgoKCSogbGludXgvaWE2NC9pb2N0bGVudC5oOiBSZWdlbmVyYXRlIGFuZCBtYW51YWxseSBtZXJnZSBjb25mbGljdGluZwoJaW9jdGxzIChUQ0dFVFMgJiBTTkRDVExfVE1SX1RJTUVCQVNFLCBldGMuKS4KCgkqIGxpbnV4L2lhNjQvTWFrZWZpbGUuaW4gKGlvY3RsZGVmcy5oIGlvY3Rscy5oKTogVXBkYXRlIGZvcgoJbmV3IGlvY3RsZW50LmggZ2VuZXJhdGlvbiBzY2hlbWUuCgoJKiBsaW51eC9zeXNjYWxsLmggKHN5c19jbG9uZTIpOiBEZWNsYXJlLgoJW0lBNjRdIERlZmluZSBpYTMyIHNvY2tldCwgaXBjLCBhbmQgZXh0cmEgc3lzY2FsbCBudW1iZXJzLgoKCSogbGludXgvaW9jdGxlbnQuc2ggKHJlZ2V4cCk6IEFsc28gaGFuZGxlIDxhc20vaW9jdGxzLmg+IHNvIHdlCglkb24ndCBtaXNzIHRoZSB0dHkgaW9jdGxzICh1bmZvcnR1bmF0ZWx5LCBzb21lIG9mIHRoZSBzb3VuZCB0aW1lcgoJaW9jdGxzIGFyZSBpbiBjb25mbGljdCB3aXRoIHRoZW0hKS4KCgkqIHV0aWwuYyAoc2V0YnB0KSBbSUE2NF06IEFkZCBpYTMyIHN1cHBvcnQgKGJ5IERvbiBEdWdnZXIpLgoJKGNscmJwdCkgW0lBNjRdOiBEaXR0by4KCgkqIHN5c2NhbGwuYyAoaW50ZXJuYWxfc3lzY2FsbCk6IEhhbmRsZSBTWVNfY2xvbmUyLCBTWVMzMl93YWl0NCwKCWFuZCBTWVMzMl9leGl0LgoJKGdldF9zY25vKTogR2V0IGlhMzIgc3lzY2FsbCBudW1iZXIgZnJvbSByMSAob3JpZyBlYXgpIGluc3RlYWQgb2YKCXI4IChlYXgpLiAgSGFuZGxlIFRDQl9XQUlURVhFQ1ZFLgoJKHN5c2NhbGxfZml4dXApOiBIYW5kbGUgaWE2NC4KCShzeXNjYWxsX2VudGVyKTogRml4IGFyZ3VtZW50IGZldGNoaW5nIGZvciBpYTY0LgoKCSogc3RyYWNlLmMgW0lBNjQgJiYgTElOVVhdOiBJbmNsdWRlIDxhc20vcHRyYWNlX29mZnNldHMuaD4uCgkodHJhY2UpIFtQVF9HRVRTSUdJTkZPXTogUHJpbnQgc2lnbmFsIGFkZHJlc3MgYW5kIHBjIGlmIHBvc3NpYmxlLgoKCSogcHJvY2Vzcy5jICh0Y3ApOiBOZXcgZnVuY3Rpb24uCgkoY2hhbmdlX3N5c2NhbGwpOiBBZGQgc3VwcG9ydCBmb3IgaWE2NCBsaW51eC4KCShzeXNfZXhlY3ZlKTogVHVybiBvbiBUQ0JfV0FJVEVYRUNWRSBmb3IgaWE2NCBsaW51eC4KCgkqIGRlc2MuYyAoZ2V0bGspOiBDYXN0IGxfbGVuIHRvICJsb25nIGxvbmciIHRvIGF2b2lkIHdhcm5pbmdzIHdoZW4KCXR5cGUgaXMgbmFycm93ZXIuCgkqIHJlc291cmNlLmMgKHNwcmludHJsaW02NCk6IERpdHRvLgoKCSogZGVmcy5oIChUQ0JfV0FJVEVYRUNWRSkgW0lBNjRdOiBEZWZpbmUuCglbSUE2NF06IERlY2xhcmUgImlhMzIiIHZhcmlhYmxlLgoKCSogYmptLmM6IERvIG5vdCBpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4uICBJdCdzIG5vdCBzYWZlIHRvIGluY2x1ZGUKCWtlcm5lbCBoZWFkZXJzLiAgRGVjbGFyZSB0aGUgbmVjZXNzYXJ5IGNvbnN0YW50cyBhbmQgc3RydWN0dXJlcwoJZGlyZWN0bHkgaW5zdGVhZC4KCjIwMDEtMTAtMDEgIERhdmlkIE1vc2JlcmdlciAgPGRhdmlkbUBocGwuaHAuY29tPgoKCSogc2lnbmFsLmMgKHBhcnNlX3NpZ3NldF90KTogTmV3IGZ1bmN0aW9uLgoJKHNpZ2lzaGFuZGxlZCk6IEZpeCBvZmYtYnktb25lIGJ1ZyBieSB1c2luZyBwYXJzZV9zaWdzZXRfdCgpIGFuZAoJYXZvaWRpbmcgcmVseWluZyBvbiBpbnRlcm5hbCBsYXlvdXQgb2Ygc2lnc2V0X3QgZGF0YXN0cnVjdHVyZS4KCjIwMDEtMDQtMjYgIERhdmlkIE1vc2JlcmdlciAgPGRhdmlkbUBocGwuaHAuY29tPgoKCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IEFkZCBnZXR1bndpbmQoKS4KCjIwMDEtMDQtMTEgIERhdmlkIE1vc2JlcmdlciAgPGRhdmlkbUBocGwuaHAuY29tPgoKCSogc3lzY2FsbC5jIChzeXNjYWxsX2VudGVyKTogVXNlIFBUX1JCU19FTkQgaW5zdGVhZCBvZiBkZXByZWNhdGVkCglQVF9BUl9CU1AuICBQaWNrIHVwIGFyZ3VtZW50cyBzdGFydGluZyB3aXRoIG91dDAsIHdoaWNoIGlzIG5vdAoJYWx3YXlzIHRoZSBzYW1lIGFzIHIzMiAoZS5nLiwgY29uc2lkZXIgaW5saW5lZCBzeXNjYWxscykuCgoyMDAxLTA5LTI4ICAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIHByb2Nlc3MuYzogRnJlZUJTRC1DVVJSRU5UIG5vIGxvbmdlciBoYXMgUFRfUkVBRF9VLCBhbmQgYW55d2F5IHdlCiAgICB3ZXJlIHNob3dpbmcgaXQgYXMgUFRfV1JJVEVfVSEgIEZpeCBmcm9tIE1heGltZSBIZW5yaW9uLgoKMjAwMS0wOS0xOCAgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBuZXQuYzogZml4IGRpc3BsYXkgb2Ygc29ja2FkZHIgc3RydWN0dXJlcywgc29tZXRpbWVzIHRvbyBtYW55ICJ9IiwKICAgIHNvbWV0aW1lcyB0b28gZmV3LiAgRml4IHN1Z2dlc3RlZCBieSBSaWNoYXJkIEtldHRsZXdlbGwuCgoyMDAxLTA4LTE5ICAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBzaWduYWwuYzogZG8gbm90IGluY2x1ZGUgYXNtL3NpZ2NvbnRleHQuaCBvbiBJQTY0IHNpbmNlIGl0IGdldHMKICAgIHRoZSBzdHJ1Y3QgZnJvbSBiaXRzL3NpZ2NvbnRleHQuaCBhbHJlYWR5IHdoaWNoIHNpZ25hbC5oIGluY2x1ZGVzLgoKMjAwMS0wOC0wMyAgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvaW9jdGxlbnQuc2g6IGNoYW5nZSByZWdleHBzIHNvIHdlIGNhdGNoIHNvdW5kIGlvY3RscyBhcyB3ZWxsIGluCiAgICBMaW51eAogICogbGludXgvTWFrZWZpbGUuaW46IGZpeCBhIGZldyB0aGluZ3Mgc28gdGhlIGlvY3RsIGxpc3QgaXMgZ2VuZXJhdGVkCiAgICBwcm9wZXJseQogICogaW9jdGwuYzogcmVtZW1iZXIgdG8gc2hpZnQgaW9jdGwgbWFza3MgYXMgd2VsbAoKMjAwMS0wOC0wMyAgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTGludXgvKiovc3lzY2FsbGVudC5oOiBzeW5jaHJvbml6ZSBzZWN0aW9uIGZvciBmY250bCBhbmQgdXNlIHN5c19mY250bAogICAgZm9yIHN5c19mY250bCBhcyB3ZWxsCgoyMDAxLTA4LTAzICAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9ocHBhL3N5c2NhbGxlbnQuaDogdXBkYXRlZCBmcm9tIE1hdHRoZXcgV2lsY294CgoyMDAxLTA4LTAzICAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBwcm9jZXNzLmM6IHNlZW1zIExpbnV4L0lBNjQgY2hhbmdlZCByZWdpc3RlciBuYW1lcyBvbiB1cywgc3dpdGNoIHRvCiAgICB1c2luZyBuZXcgbmFtZXMuCgoyMDAxLTA4LTAzICAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBzdHJhY2UuYzogc2V0IENMT0VYRUMgIGZsYWcgZm9yIG91dHB1dGZpbGUKCjIwMDEtMDgtMDMgICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L3NwYXJjL3N5c2NhbGwuaCwgbGludXgvc3BhcmMvc3lzY2FsbGVudC5oOiBhZGQgc29tZSBMRlMgY2FsbHMKCjIwMDEtMDctMjMgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogY29uZmlndXJlLmluOiBTdXBwb3J0IGNyb3NzLWNvbXBpbGluZyBiZXR3ZWVuIGFyY2hpdGVjdHVyZXMKCjIwMDEtMDctMTMgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogY29uZmlndXJlLmluOiBhZGQgUzM5MCB0byBhcmNoaXRlY3R1cmUgbGlzdAoKMjAwMS0wNy0xMCAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIFRPRE8sIGRlZnMuaCwgaW8uaCwgbmV0LmMsIHN0cmFjZS5jLCBzeXNjYWxsLmMsIHV0aWwuYzogTWVyZ2UgZml4ZXMKICAgIGZyb20gUmljaGFyZCBLZXR0bGV3ZWxsIDxya2V0dGxld2VsbEB6ZXVzLmNvbT4gd2hpY2ggYWRkIEkvTyBkdW1waW5nCiAgICBvZiBhcmdzIHRvIHJlYWR2L3dyaXRldi4gIEFsc28gZ2V0cyByaWQgb2YgcmVkdW5kYW50IHByaW50aW92ZWMKICAgIHJvdXRpbmUgZnJvbSBuZXQuYyAoZHVwbGljYXRlIG9mIHRwcmludF9pb3YgaW4gdXRpbC5jKS4KCjIwMDEtMDctMDIgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogY29uZmlnLntndWVzcyxzdWJ9OiB1cGRhdGVkCgoyMDAxLTA1LTE1ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogc2lnbmFsLmM6IHBhc3MgYSBwb2ludGVyIHRvIHNpZ21hc2sgdG8gcHJpbnRzaWdtYXNrIGZyb20gcHJpbnRjb250ZXh0LAogICAgaXQgd2FzIGp1c3QgcGFzc2luZyB0aGUgc2lnbWFzayAodWNwLT51Y19zaWdtYXNrKS4KCjIwMDEtMDUtMTUgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiB1dGlsLmM6IERvbid0IHJ1biBvZmYgdGhlIGVuZCBvZiB2YWxpZCBtZW1vcnkgaW4gdW1vdmVzdHIgd2hlbgogICAgVVNFX1BST0NGUy4gIEltcG9ydGFudCBmb3IgRlJFRUJTRCBzeXN0ZW1zICh3aGljaCBzZWVtIHRvIGhhdmUgYW4KICAgIHVubWFwcGVkIHBhZ2UganVzdCBhZnRlciB0aGUgYXJncy9lbnYgYXJlYSkuCgoyMDAxLTA0LTE4ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogY29uZmlndXJlLmluOiB0ZXN0IGZvciBzeXMvbnNjc3lzLmgsIHRoZSBub24tc3RvcCBjbHVzdGVycyBpbmNsdWRlcy4KICAqIHByb2Nlc3MuYzogaGFuZGxlIHJmb3JrezEsYWxsfSBhbmQgcmV4ZWN2ZSBjYWxscyBvbiBub24tc3RvcCBjbHVzdGVycy4KICAqIHN5c2NhbGwuYzogdHJlYXQgcmZvcmt7MSxhbGx9IGFuZCBmb3JrezEsYWxsfSBhcyBmb3JrIGxpa2UgY2FsbHMuCiAgICBUcmVhdCByZXhlY3ZlIGFzIGFuIGV4ZWMuCiAgKiBzeXN0ZW0uYzogZGVjb2RlIGFyZ3VtZW50cyB0byBzc2lzeXMgY2FsbCBvbiBuc2Mgc3lzdGVtcy4KICAqIHN2cjQvZHVtbXkuaCwgc3ZyNC9zeXNjYWxsLmg6IG5vdyB3ZSBoYW5kbGUgcmZvcmt7MSxhbGx9LCBzc2lzeXMgYW5kCiAgICByZXhlY3ZlIGNhbGxzLgoKMjAwMS0wNC0xMiAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBwcm9jZXNzLmM6IGZpeCBjYXN0IGZvciBwb3dlcnBjIGNvZGUKICAqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiB1cGRhdGUgc3lzY2FsbCBsaXN0CiAgKiBSRUFETUU6IGZpeCBhZGRyZXNzIGZvciB0aGUgc3RyYWNlIG1haWxpbmdsaXN0CiAgKiBzaWduYWwuYzogc3dpdGNoIHRvIHVzaW5nIC9wcm9jLzxwaWQ+L3N0YXR1cyBvbiBMaW51eCBzbyB3ZSBjYW4gZ2V0CiAgICB0aGUgcmVhbHRpbWUgc2lnbmFscyBhcyB3ZWxsCgoyMDAxLTA0LTEwICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIHBhdGNoZXMgZnJvbSBNYWNpZWogVy4gUm96eWNraToKICAgICsgdXRpbC5jOiBhZGQgY29kZSB0byBwcmludCBQQyBmb3IgTUlQUwogICAgKyBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogdXBkYXRlZAogICAgKyBzeXN0ZW0uYzogZm9ybWF0aW5nIGZpeGVzIGZvciBzeXNfc3lzbWlwcwogICAgKyBjb25maWd1cmUuaW46IHRlc3QgZm9yIHlldCBtb3JlIGhlYWRlcnMKICAgICsgc3RyZWFtLmM6IHVzZSBjb25maWd1cmUtaGVhZGVydGVzdHMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIE9TIGhpbnRzCgoyMDAxLTA0LTA3ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE5FV1M6IHN0YXJ0IDQuMy4xIGl0ZW1zCiAgKiB2ZXJzaW9uLmM6IHVwZGF0ZWQgdG8gc2F5IDQuMy4xICh3YXMgc3RpbGwgNC4yLCBvb3BzISkKCjIwMDEtMDQtMDcgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogY29uZmlndXJlLmluOiB0ZXN0IGZvciBhc20vc3lzbWlwcy5oIGFuZCBsaW51eC91dHNuYW1lLmgKICAqIGxpbnV4L3N5c2NhbGwuaDogZml4IGEgdHlwbyBmb3Igc3lzX3N5c21pcHMKICAqIHN5c3RlbS5jOiBpbmNsdWRlIGFzbS9zeXNtaXBzLmggYW5kIGxpbnV4L3V0c25hbWUuaCBpZiB0aGV5IGV4aXN0LAogICAgZml4IHR5cG8KCjIwMDEtMDMtMzEgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvbWlwcy9pb2N0bGVudC5oOiB1cGRhdGVkIHVzaW5nIG5ldyBMaW51eCBpb2N0bCBzZXR1cAoKMjAwMS0wMy0zMSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9pYTY0L2lvY3RsZW50Lmg6IHJlZ2VuZXJhdGVkCgoyMDAxLTAzLTMxICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L3thbHBoYSxpYTY0LHBvd2VycGN9L2lvY3RsZW50LnNoOiByZW1vdmVkLCBhbGwgYXJjaHMgdXNlIHRoZQogICAgZ2VuZXJhbCBMaW51eCBpb2N0bGVudC5zaAoKMjAwMS0wMy0zMSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9pb2N0bGVudC5zaDogYWRkIGRpciB2YXJpYWJsZSBmb3IgbG9jYXRpb24gb2Yga2VybmVsIGhlYWRlcnMKCjIwMDEtMDMtMjkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvaWE2NC9pb2N0bGVudC5oOiB1cGRhdGVkIHVzaW5nIG5ldyBMaW51eCBpb2N0bCBzZXR1cAoKMjAwMS0wMy0yOSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9wb3dlcnBjL2lvY3RsZW50Lmg6IHVwZGF0ZWQgdXNpbmcgbmV3IExpbnV4IGlvY3RsIHNldHVwCgoyMDAxLTAzLTI5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L2hwcGEvaW9jdGxlbnQuaDogdXBkYXRlZCB1c2luZyBuZXcgTGludXggaW9jdGwgc2V0dXAKCjIwMDEtMDMtMjkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvYWxwaGEvaW9jdGxlbnQuaDogdXBkYXRlZCB1c2luZyBuZXcgTGludXggaW9jdGwgc2V0dXAKCjIwMDEtMDMtMjggIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogY29uZmlndXJlLmluOiB1c2Ugc3BhcmMqIHNvIHdlIGNhbiBjb21waWxlIG9uIHNwYXJjNjQgYXMgd2VsbAogICogcHJvY2Vzcy5jLCBzeXNjYWxsLmM6IHdvcmsgYXJvdW5kIGRvdWJsZSBkZWZpbmUgb2YgZnBxLCBmcSBhbmQgZnB1CiAgICBzdHJ1Y3RzIG9uIExpbnV4L3NwYXJjLCBhbmQgdXNlIHJlZ3MgaW5zdGVhZCBvZiBwdF9yZWdzCiAgKiBkb24ndCB1c2UgYXNtL3NpZ2NvbnRleHQuaCBvbiBMaW51eC9zcGFyYwoKMjAwMS0wMy0yOCAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9zcGFyYy9pb2N0bGVudC5oOiB1cGRhdGVkIHVzaW5nIG5ldyBMaW51eCBpb2N0bCBzZXR1cAoKMjAwMS0wMy0yOCAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBzdHJhY2UuYzogdXNlIF9fV0FMTCBhcyB3YWl0NCBmbGFnIGlmIGl0IGV4aXN0cyBzbyB3ZSBjYW4gcHJvcGVybHkKICAgIHRyYWNlIHRocmVhZGVkIHByb2dyYW1zCgoyMDAxLTAzLTI3ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogYWNsb2NhbC5tNDogYWRkIGNoZWNrIGZvciBlbmRpYW5uZXNzIG9mIGxvbmcgbG9uZy4KICAqIGFjY29uZmlnLmg6IGFkZCAjZGVmaW5lIGZvciBMSVRUTEVfRU5ESUFOX0xPTkdfTE9ORy4KICAqIGNvbmZpZ3VyZS5pbjogY2hlY2sgZm9yIGVuZGlhbm5lc3Mgb2YgbG9uZyBsb25nLgogICogZGVmcy5oOiBjaGFuZ2UgTE9OR19MT05HIG1hY3JvIHRvIHdvcmsgd2l0aCBlaXRoZXIgZW5kaWFubmVzcyBvZgogICAgbG9uZyBsb25nLgoKMjAwMS0wMy0yNyAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIG5ldC5jOiBNYWtlIGNvbXBpbGFibGUgYnkgU0NPIFVESyBjb21waWxlciAoZG9lc24ndCBsaWtlIGVtcHR5CiAgICBpbml0aWFsaXNhdGlvbiBsaXN0IGZvciBhcnJheSkuCgoyMDAxLTAzLTI3ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogc3ZyNC9zeXNjYWxsZW50Lmg6IG50cF9hZGp0aW1lIGVudHJ5IHdhcyBkdXBsaWNhdGVkIG9uIFNvbGFyaXMKICAgIHN5c3RlbXMgLSBiYWQgbWVyZ2Ugb2YgSGFyYWxkIEJvZWhtZSdzIHBhdGNoIGJ5IG1lLgoKMjAwMS0wMy0yNyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsb3RzIG9mIGZpbGVzOiBhZGQgTGludXgvaHBwYSBzdXBwb3J0CgoyMDAxLTAzLTE5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L21pcHMvc3lzY2FsbGVudC5oOiB3ZSBjYW4ndCBoYXZlIC0xIG5hcmdzLCBjaGFuZ2UgdG8gMAogICogbGludXgvc3lzY2FsbGVudC5oOiBub3QgdGhhdCBzeXNjYWxscyAyMjAgYW5kIDIyMSBhcmUgdXNlZCBub3cKICAqIGNvbmZpZy5ndWVzczogdXBkYXRlZAoKMjAwMS0wMy0xNyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9pb2Nsc29ydC5jOiBuZXcgZmlsZQogICogbGludXgvaW9jdGxlbnQuc2g6IGNvbXBsZXRlIHJld3JpdGUgdG8gdXNlIGEgbW9yZSBzYW5lIGFwcHJvYWNoIHRvIGdldAogICAgdGhlIGlvY3RsIGxpc3QgdGhhdCBkb2Vzbid0IGludm9sdmUgYXR0ZW1wdGluZyB0byAjaW5jbHVkZSBhbGwga2VybmVsCiAgICBoZWFkZXJzCiAgKiBsaW51eC8uY3ZzaWdub3JlOiBhZGRlZCBpb2N0ZGVmcy5oIGFuZCBpb2N0bHMuaCB3aGljaCBhcmUgZ2VuZXJhdGVkCiAgICBieSB0aGUgbmV3IGlvY3RsZW50LnNoCiAgKiBpb2N0bC5jOiBvbmx5IGxvb2sgYXQgdGhlIG51bWJlciBhbmQgdHlwZSBiaXRzIGZvciBsaW51eCwgc2luY2UKICAgIGlvY3RsZW50LnNoIG5vIGxvbmdlciBzdXBwbGllcyB0aGUgb3RoZXJzCgoyMDAxLTAzLTA4ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogZnJlZWJzZC9zeXNjYWxscy5wbDogT24gRnJlZUJTRCB3ZSBtdXN0IGNvcGUgd2l0aCBDT01QQVRpYmlsaXR5IHN5c2NhbGxzLAogICAgcHJldGVuZCB0aGV5IGhhdmUgbmFtZXMgZW5kaW5nIHdpdGggIj8iIHNvIHRoYXQgLWUgdHJhY2U9c3RhdCAoZm9yCiAgICBleGFtcGxlKSB3aWxsIHdvcmsuCiAgKiBmcmVlYnNkL2kzODYvc3lzY2FsbGVudC5oOiBhZGQgPyB0byBjb21wYXRhYmlsaXR5IHN5c2NhbGxzLgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGwuaDogY29uc2lzdGVuY3kuCgoyMDAxLTAzLTA4ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogYWNjb25maWcuaDogYWRkIG5ldyBTVF94eHggZGVmaW5lcy4KICAqIGFjbG9jYWwubTQ6IG1hY3JvcyB0byBjaGVjayBmb3IgbW9yZSBmaWVsZHMgaW4gc3RydWN0IHN0YXQuCiAgKiBjb25maWd1cmUuaW46IHVzZSBuZXcgbWFjcm9zIHRvIGNoZWNrIGZvciBmaWVsZHMgaW4gc3RydWN0IHN0YXQuCiAgKiBmaWxlLmM6IHVzZSBuZXcgZGVmaW5lcyB0byByZXBsYWNlICNpZmRlZiBGUkVFQlNEIGJ5ICNpZiBIQVZFX1NUX3h4eC4KCjIwMDEtMDMtMDggIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBkZWZzLmg6IHJlbmFtZSB3aW1weSBnZXQ2NCBhcyBwb3dlcmZ1bCBuZXcgTE9OR19MT05HCiAgKiBmaWxlLmM6IHVzZSBMT05HX0xPTkcKICAqIGlvLmM6IHVzZSBMT05HX0xPTkcKICAqIG1lbS5jIHVzZSBMT05HX0xPTkcKCjIwMDEtMDMtMDggIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBhY2NvbmZpZy5oOiBuZXcgI2RlZmluZXMgSEFWRV9MT05HX0xPTkdfT0ZGX1QgYW5kIEhBVkVfTE9OR19MT05HX1JMSU1fVC4KICAqIGFjbG9jYWwubTQ6IHJvdXRpbmVzIHRvIGNoZWNrIGZvciBsb25nIGxvbmcgb2ZmX3QgYW5kIHJsaW1fdC4KICAqIGNvbmZpZ3VyZS5pbjogY2hlY2sgZm9yIGxvbmcgbG9uZyBvZmZfdCBhbmQgcmxpbV90LgogICogZGVzYy5jOiBpZiBIQVZFX0xPTkdfTE9OR19PRkZfVCB0cmVhdCBmbG9jayBhcyBmbG9jazY0CiAgKiBmaWxlLmM6IGlmIEhBVkVfTE9OR19MT05HX09GRl9UIHRyZWF0IHN0YXQsbHN0YXQsZnN0YXQgYW5kIGxzZWVrIGFzIDY0CiAgICBiaXQgdmVyc2lvbnMuCiAgKiBpby5jOiBpZiBIQVZFX0xPTkdfTE9OR19PRkZfVCB1c2UgNjQgYml0IHZlcnNpb25zIG9mIHByZWFkIGFuZCBwd3JpdGUuCiAgKiBtZW0uYzogaWYgSEFWRV9MT05HX0xPTkdfT0ZGX1QgdXNlIDY0IGJpdCB2ZXJzaW9uIG9mIG1tYXAKICAqIHJlc291cmNlLmM6IGlmIEhBVkVfTE9OR19MT05HX09GRl9UIHVzZSA2NCBiaXQgdmVyc2lvbnMgb2YgZ2V0cmxpbWl0CiAgICBhbmQgc2V0cmxpbWl0LgogICogZnJlZWJzZC9zeXNjYWxscy5wcmludDogZG9uJ3QgZXhwbGljaXRseSB1c2UgNjQgYml0IHZlcnNpb25zIG9mIGNhbGxzLAogICAgbm93IGRvbmUgYXV0b21hdGljYWx5IGZvciB1cy4KICAqIGZyZWVic2QvaTM4Ni9zeXNjYWxsLmg6IGRpdHRvLgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGxlbnQuaCBkaXR0by4KCjIwMDEtMDMtMDcgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBkZXNjLmM6IE9uIEZyZWVCU0QgZmxvY2sgc3RydWN0dXJlIHVzZXMgNjQgYml0IG9mZnNldHMuCiAgKiBmaWxlLmM6IE9uIEZyZWVCU0QgdXNlIHN0YXQ2NCBhbmQgcGFscyBpbnN0ZWFkIG9mIHN0YXQuCiAgKiBmcmVlYnNkL3N5c2NhbGxzLnByaW50OiB1c2Ugc3RhdDY0LCBsc3RhdDY0IGFuZCBmc3RhdDY0LgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGwuaDogZGl0dG8uCiAgKiBmcmVlYnNkL2kzODYvc3lzY2FsbGVudC5oOiBkaXR0by4KCjIwMDEtMDMtMDcgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBmaWxlLmM6IG1lcmdlIG1pc3NpbmcgcGFydCBvZiBIYXJhbGQgQvZobWUncyBzb2xhcmlzIHBhdGNoZXMsCiAgICB3YXMgb25seSBkZWNsYXJpbmcgc3lzX3tzdGF0NjQsbHN0YXQ2NCxmc3RhdDY0fSBvbiBsaW51eCEKCjIwMDEtMDMtMDcgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBzdnI0L2R1bW15Lmg6IGZpeCBtdWx0aXBsZSBkZWZpbmUgd2FybmluZyBvbiBub24gTEZTNjQgc3lzdGVtcy4KICAqIHN2cjQvc3lzY2FsbGVudC5oOiBwcmVhZC9wd3JpdGUgYXJlIFRGIGNhbGxzLgoKMjAwMS0wMy0wNyAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGRlZnMuaDogYWRkIEFMSUdONjQgbWFjcm8gdG8gY29wZSB3aXRoIEZyZWVCU0QncyBzdHJhbmdlIGluc2lzdGVuY2UKICAgIG9uIGFsaWdubWVudCBmb3Igb2ZmX3QgKDY0IGJpdCkgYXJndW1lbnRzLiAgQWxzbyBzaW1wbGlmeSBnZXQ2NCBzbwogICAgd2UgZG9uJ3QgbmVlZCB0byBrbm93IGVuZGlhbm5lc3Mgb2YgbG9uZyBsb25nLgogICogZmlsZS5jOiBGcmVlQlNEIG5vdyB1c2VzIDY0IGJpdCB2ZXJzaW9ucyBvZiBsc2VlaywgdHJ1bmNhdGUsCiAgICBmdHJ1bmNhdGUsIGFsbG93cyByZWR1Y3Rpb24gaW4gbnVtdmJlciBvZiBob3JyaWQgI2lmJ3MKICAqIGlvLmM6IEZyZWVCU0Qgbm93IHVzZXMgNjQgYml0IHZlcnNpb25zIG9mIHByZWFkLCBwd3JpdGUuCiAgKiBtZW0uYzogRnJlZUJTRCBub3cgdXNlcyA2NCBiaXQgdmVyc2lvbiBvZiBtbWFwLgogICogZnJlZWJzZC9zeXNjYWxscy5wcmludDogdXNlIDY0IGJpdCB2ZXJzaW9ucyBvZiB2YXJpb3VzIHN5c2NhbGxzLgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGwuaDogdXNlIDY0IGJpdCB2ZXJzaW9ucyBvZiB2YXJpb3VzIHN5c2NhbGxzLgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGxlbnQuaDogdXNlIDY0IGJpdCB2ZXJzaW9ucyBvZiB2YXJpb3VzIHN5c2NhbGxzLgoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGZpbGUuYzogSW1wbGVtZW50IHRydW5jYXRlNjQgYW5kIGZ0cnVuY2F0ZTY0CiAgKiBzdnI0L2R1bW15Lmg6IGFkZCBkdW1taWVzIGZvciB0cnVuY2F0ZTY0IGFuZCBmdHJ1bmNhdGU2NCBmb3Igbm9uCiAgICBMRlM2NCBzeXN0ZW1zLgogICogc3ZyNC9zeXNjYWxsLmg6IGFkZCBkZWNsYXJhdGlvbnMgZm9yIHRydW5jYXRlNjQgYW5kIGZ0cnVuY2F0ZTY0LgoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGZyZWVic2Qvc3lzY2FsbHMucGw6IGZpeCBmb3IgRnJlZUJTRCA0LjEgKG5ldyBvcHRpb25hbCBmaWVsZCBpbgogICAgc3lzY2FsbCBtYXN0ZXIgZmlsZSkuCgoyMDAxLTAzLTA2ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogc3lzY2FsbC5jOiBmaXggZm9yIEZyZWVCU0QgNC4xIChTWVNfc2VtY29uZmlnIGhhcyBkaXNhcHBlYXJlZCkuICBBbHNvCiAgICB6YXAgaW5jb3JyZWN0IHN5c2NhbGwgc3ViYXJnIHJhbmdlIGNoZWNrLgoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGNvbmZpZ3VyZS5pbiwgZGVmcy5oLCBkZXNjLmMsIGZpbGUuYywgaW8uYywgbWVtLmMsIG5ldC5jLCByZXNvdXJjZS5jLAogICAgc2lnbmFsLmMsIHN5c2NhbGwuYywgc3ZyNC9kdW1teS5oLCBzdnI0L3N5c2NhbGwuaCwgc3ZyNC9zeXNjYWxsZW50Lmg6CiAgICBtZXJnZSBIYXJhbGQgQvZobWUncyBzb2xhcmlzIHBhdGNoZXMgKF9MRlM2NF9MQVJHRUZJTEUgYW5kIGtlcm5lbCBhaW8KICAgIG1vc3RseSkuCgoyMDAxLTAzLTA2ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogZHVtbXkuaDogYWRkIHVuaW1wbGVtZW50ZWQgVVcgc3ljYWxscwogICogc3lzY2FsbC5oOiB3ZSBjYW4gZG8gc2V0dGltZW9mZGF5IGZvciBVVywgd2hvcGVlIQogICogc3lzY2FsbGVudC5oOiBmaXggdW5pbXBsZW1lbnRlZCBVVyBzeXNjYWxscwoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGFjbG9jYWwubTQ6IGxvb2sgZm9yIHByX3N5c2NhbGwgaW4gcHJfbHdwIGlmIHdlIEhBVkVfTVBfUFJPQ0ZTCiAgKiBkZWZzLmg6IGFkZCBQUl9TWVNDQUxMIHRvIGFsbG93IHVzZSBvZiBwcl9sd3AucHJfc3lzY2FsbCBpZiBpdCBleGlzdHMuCiAgKiBzeXNjYWxsLmM6IHVzZSBQUl9TWVNDQUxMIGluc3RlYWQgb2YgcHJfc3lzY2FsbCwgZml4IHVwIFVuaXhXYXJlIGNvZGUKICAgIHNvIGl0IGRvZXNuJ3QgdHJ5IHRvIHVzZSBwcl9zeXNhcmcuCgoyMDAxLTAzLTA2ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogYWNsb2NhbC5tNDogb24gc3lzdGVtcyBvdGhlciB0aGFuIGxpbnV4IGxvb2sgZm9yIHN0YXQ2NCBpbiBzeXMvc3RhdC5oCiAgKiBmaWxlLmM6IGhhbmRsZSB4c3RhdCB2ZXJzaW9uIF9TVEFUNjRfVkVSLCBha2Egc3RhdDY0LgoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIG5ldC5jOiBtYWtlIHN1cmUgU09MXyBvcHRpb25zIGFyZSBkZWZpbmVkIGJlZm9yZSB1c2luZy4KICAqIHNpZ25hbC5jOiBkZWNsYXJlIHNpZ3NldCB2YXJpYWJsZSwgb25seSB1c2VkIG9uIGxpbnV4LCBpbnNpZGUgI2lmZGVmLgoKMjAwMS0wMi0yMSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBuZXQuYzogZml4IGZvcm1hdCBmb3IgcHJpbnRpbmcgVW5peCBkb21haW4gc29ja2V0cwoKMjAwMS0wMi0xOSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogdXNlIG5ldyBzeXNfc3lzbWlwcwogICogc3lzdGVtLmM6IGFkZCBzeXNfc3lzbWlwcyBkZWNvZGluZwoKMjAwMS0wMi0xNiAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBDUkVESVRTOiBhZGQgQXJrYWRpdXN6IE1pc2tpZXdpY3ogPG1pc2lla0BwbGQub3JnLnBsPiB3aG8KICAgIHN1Ym1pdHRlZCB0aGUgSVA2IHNjb3BlIElEIHVwZGF0ZXMKICAqIGFjY29uZmlnLmg6IGFkZCBIQVZFX1NJTjZfU0NPUEVfSUQgYW5kIEhBVkVfU0lONl9TQ09QRV9JRF9MSU5VWAogICogYWNsb2NhbC5tNDogYWRkIEFDX1NJTjZfU0NPUEVfSUQgdG8gY2hlY2sgaWYgc2luNl9zY29wZV9pZCBpcwogICAgYXZhaWxhYmxlCiAgKiBjb25maWd1cmUuaW46IGNoZWNrIGZvciBpZl9pbmRleHRvbmFtZSBmdW5jdGlvbiBhbmQgc2luNl9zY29wZV9pZAogICogbmV0LmM6IHRlYWNoIHByaW50c29jayBhYm91dCBJUDYgc2NvcGUgaWRzCgoyMDAxLTAyLTE2ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGNvbmZpZ3VyZS5pbjogdGVzdCBmb3IgbmV0aW5ldC90Y3AuaCBhbmQgbmV0aW5ldC91ZHAuaCBleGlzdGFuY2UKICAqIG5ldC5jOiBpbmNsdWRlIG5ldGluZXQvdGNwLmggYW5kIG5ldGluZXQvdWRwLmggaWYgdGhleSBleGlzdAogICogTWFrZWZpbGUuaW46IHVzZSBAbWFuZGlyQCBhbmQgQGJpbmRpckAKCjIwMDAtMTEtMjYgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogIG5ldC5jOiBmaXggZm9ybWF0aW5nIGVycm9yIGluIHN5c19zZXRzb2Nrb3B0CiAgKiAgbmV0LmM6IGFkZCBsaXN0IG9mIHNvY2tldGxheWVycyBhbmQgdXNlIHRoYXQgZm9yIFtnc11ldHNvY2tvcHQKCjIwMDAtMTAtMTIgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogdGltZS5jOiB1c2Ugc3lzL3RpbWV4Lmggc28gdGhpbmdzIGNvbXBpbGUgd2l0aCAyLjIga2VybmVscwogICogc3RyZWFtLmM6IHRlc3QgaWYgTVNHXyogY29uc3RhbnRzIGFyZSAjZGVmaW5lZAoKMjAwMC0wOS0wMyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBwcm9jZXNzLmM6IHBlcmZvcm0gYnB0IHRyaWNrIGZvciBjbG9uZSBhcyB3ZWxsIHNvIHdlIGNhbiBnZXQgdGhlCiAgICBwaWQgb2YgdGhlIGNoaWxkIGJlZm9yZSBpdCBzdGFydHMgZG9pbmcgc29tZXRoaW5nCiAgKiBmaWxlLmM6IHJlbmFtZSBkaXJlbnQ2NCBzdHJ1Y3QgdG8ga2VybmVsX2RpcmVudDY0IHNvIHRoaW5ncyBjb21waWxlCiAgICBhZ2FpbiB3aXRoIG5ld2VyIGxpYmNzCiAgKiB0ZXN0L2Nsb25lLmM6IGltcHJvdmUgb3VyIHRlc3RjYXNlIGEgYml0CiAgKiBNZXJnZSBhbm90aGVyIHBhdGNoIGZyb20gR+RlbCBSb3VhbGxhbmQgd2l0aCBGcmVlQlNEIHVwZGF0ZXMKCjIwMDAtMDktMDEgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbG90cyBvZiBmaWxlczogbWVyZ2UgcGF0Y2ggZnJvbSBHYetsIFJvdWFsbGFuZCB0byBhZGQKICAgIHN1cHBvcnQgZm9yIEZyZWVCU0QuCgoyMDAwLTA4LTA5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGZpbGUuYzogdXBkYXRlIHRvIHJlZmxlY3QgdGhhdCBzdF9pbm8gc3VkZGVubHkgYmVjYW1lIGEgbG9uZyBsb25nCiAgICBpbiB0aGUgaW4gTGludXggMi40LjAtdGVzdDYKCjIwMDAtMDgtMDkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogdGVzdC9jbG9uZS5jOiBtaW5vciBmaXh1cAogICogQW5vdGhlciBidW5jaCBvZiBwYXRjaGVzIGZyb20gSm9obiBIdWdoZXMgbWVyZ2VkOgogICogc2lnbmFsLmM6CiAgICArIFNWUjQgcHJpbnRjb250ZXh0KCk6IHNpZ3NldF90ICE9IHNpZ3NldF90KgogICAgKyBnZXRjb250ZXh0IHJldHVybnMgYSB2YWx1ZSwgc28gcHJpbnQgb24gZXhpdCBvZiBzeXNjYWxsCiAgICArIGFkZCBVQ19GUCB0byB1Y29udGV4dF9mbGFncyBmb3IgT1Mgd3JpdGVycyB0aGF0IGNhbid0IHNwZWxsCiAgICArIHN5c19zaWduYWwoKTogc3BlY2lhbCBjYXNlIFNJR197RVJSLERGTCxJR059CiAgICArIGRlY29kZV9zdWJjYWxsKCk6IG9ubHkgZG8gc3ViY2FsbCByYW5nZSBjaGVja2luZyB3aGVuIG5lZWRlZAogICogYnVuY2ggb2YgVW5peFdhcmUgdXBkYXRlcwogICogYWNsb2NhbC5tNCwgYWNjb25maWcuaCwgY29uZmlndXJlLmluOiBhZGQgdGVzdCBmb3IgbG9uZyBsb25nIHR5cGUKCjIwMDAtMDctMDQgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbmV0LmM6IGFkZCBTT0xfUEFDS0VUIGFuZCBTT0xfUkFXIHNvY2tldCBvcHRpb25zLCB1cGRhdGUKICAgIFNPTF9JUCBhbmQgU09MX1RDUAoKMjAwMC0wNi0yMyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBzdHJhY2UuYzogY2xvc2Ugb3V0ZiBiZWZvcmUgd2UgZXhlYyBhIGNoaWxkIHByb2Nlc3MKCjIwMDAtMDYtMDkgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgoKICAqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgbGluayBhZ2FpbnN0IGxpYm5zbCBvbiBMaW51eCwgaXQncyB1bm5lY2Vzc2FyeS4KICAqIGRlZnMuaCAoc3RydWN0IHRjYik6IE1ha2UgYXV4c3RyIG1lbWJlciBjb25zdC4KICAqIGZpbGUuYyAoZnNtYWdpYyk6IEFuZCBtYW55IG1vcmUgbWFnaWMgbnVtYmVycy4KICAqIHV0aWwuYzogRG9uJ3QgaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+IGZvciBnbGliYyAyLjEgYW5kIHVwLgoKMjAwMC0wNC0yNiAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBkZWZzLmg6IGJhbGFuY2UgI2lmLyNlbmRpZiBhZ2FpbgogICogc3lzdGVtLmM6IGZpeCByZXR1cm4gc3RhdGVtZW50cyBpbiBzeXNfY2FwZ2V0KCkKICAqIE1lcmdlIHVwZGF0ZXMgZnJvbSBUb3BpIE1pZXR0aW5lbiA8VG9waS5NaWV0dGluZW5AbmljLmZpPjoKICAgICsgZmlsZS5jOiBhZGQgRl9bU0ddRVRTSUcgdG8gZmNudGwgZmxhZ3MKICAgICsgc3RyYWNlLmM6IGRvbid0IHNldHJlW2d1XWlkIGlmIG5vdCBuZWVkZWQKICAgICsgc3lzdGVtLmM6IGhhbmRsZSBzeXNfcmVib290IGZvciBMaW51eAogICAgKyB0ZXJtLmM6IGFkZCBiYXVkcmF0ZSBjb25zdGFudHMgdXAgdG8gQjQwMDAwMDAKICAgICsgbGludXgvKiovc3lzY2FsbGVudC5oOiBub3RlIHRoYXQgbXVubG9ja2FsbCBoYXMgbm8gYXJndW1lbnRzCgoyMDAwLTA0LTI1ICBEYXZpZCBNb3NiZXJnZXIgIDxkYXZpZG1AaHBsLmhwLmNvbT4KCiAgKiBDUkVESVRTOiBmaXggZW1haWwgYWRkcmVzcwogICogcHJvY2Vzcy5jOiBoYW5kbGUgUFJfW0dTXUVUX1VOQUxJR04gYW5kIFBSX1tHU11FVF9LRUVQQ0FQUwogICogc2lnbmFsLmM6IGhvbm91ciBvZmZzZXQgb2Ygc2lnY29uZmlnIGluIHNpZ2ZyYW1lIHN0cnVjdHVyZSBmb3IKICAgIExpbnV4L2lhNjQKICAqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBBZGQgcGVyZm1vbmN0bCwgcGl2b3Ryb290LCBtaW5jb3JlLCBhbmQKICAgIG1hZHZpc2Ugc3lzY2FsbHMuCiAgKiBzeXNjYWxsLmMgKHN5c2NhbGxfZW50ZXIpOiBXaXRoIEtldmluJ3MgbGF0ZXN0IHB0cmFjZSBwYXRjaGVzLAogICAgQVJfQlNQIHBvaW50cyB0byB0aGUgX2VuZF8gb2YgdGhlIGFjdGl2ZSByZWdpc3RlciBmcmFtZSwgc28gd2UgbmVlZAogICAgdG8gYWRqdXN0IGJzcCBieSBtb3ZpbmcgaXQgYmFjayBieSB0aGUgc2l6ZSBvZiB0aGUgYWN0aXZlIGZyYW1lCiAgICBiZWZvcmUgdXNpbmcgaXQuCgoyMDAwLTA0LTI0ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHByb2Nlc3MuYzogYWRkIHNwYXJjIHN1cHBvcnQgdG8gY2hhbmdlX3N5c2NhbGwKCjIwMDAtMDQtMjIgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvbWlwcy9zeXNjYWxsZW50Lmg6IGZpeCBzb21lIHR5cG9zCgoyMDAwLTA0LTE0ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L21pcHMvc3lzY2FsbGVudC5oOiBhZGRlZCBuYW1lcyBmb3IgU1ZSNCwgU1lTViwgQlNENC4zIGFuZCBQT1NJWAogICAgc3lzY2FsbHMKCjIwMDAtMDQtMTMgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogZGVmcy5oOiBMaW51eC9NSVBTIHVzZXMgc3lzY2FsbHMgdXAgdG8gPjRrLCBzbyBzZXQgTUFYX1FVQUxTIHRvCiAgICA0OTk5CgoyMDAwLTA0LTA5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFJFQURNRS1saW51eDogdXBkYXRlZCB0byBub3RlIHRoYXQgc3RyYWNlIG1pZ2h0IG5vdCBjb21waWxlCiAgICB3aXRoIGRldmVsb3BtZW50IGtlcm5lbHMKICAqIGJqbS5jOiBzeXNfcXVlcnlfbW9kdWxlOiBjaGVjayBpZiBtYWxsb2Mgc3VjY2VlZHMKICAqIHN5c3RlbS5jOiBzeXNfY2FwW2dzXWV0KCk6IGNoZWNrIGlmIG1hbGxvYyBzdWNjZWVkcywgb25seSBtYWxsb2Mgb25jZQogICogbGludXgvc3lzY2FsbGVudC5oOiB1cGRhdGVkIGZvciAyLjMuOTlwcmUzCiAgKiBsaW51eC9hbHBoYS9zeXNjYWxsZW50Lmg6IHVwZGF0ZWQgZm9yIDIuMy45OXByZTMsIGFkZCBhbGwgb3NmIHN5c2NhbGxzCiAgICBldmVuIHRob3VnaCBMaW51eCBkb2Vzbid0IGltcGxlbWVudCB0aGVtCiAgKiBzeXNjYWxsLmM6IGFkZCBnbG9iYWwgdmFyaWFibGVzIGZvciBNSVBTIHJlZ2lzdGVycyBhcyB3ZWxsCiAgKiBzeXNjYWxsLmM6IG1vdmUgZ2xvYmFsIHZhcmlhYmxlcyB0byBiZWZvcmUgZ2V0X3Njbm8gc2luY2UgdGhhdCB1c2VzIHRoZW0KICAqIHV0aWwuYzogb29wcywgbWlzc3BlbGxlZCBkZWZpbmVkCiAgKiBwcm9jZXNzLmM6IGZpeCBwdHJhY2UgY2FsbHMgaW4gY2hhbmdlX3N5c2NhbGwKICAqIG1lbS5jOiBkZWNvZGUgc3lzX21hZHZpc2UKICAqIE1lcmdlIHBhdGNoIGZyb20gVG9waSBNaWV0dGluZW4gPFRvcGkuTWlldHRpbmVuQG5pYy5maT4KICAgICsgYWRkIHN1cHBvcnQgZm9yIHF1b3RhY3RsLCBmZGF0YXN5bmMsIG1sb2NrLCBtbG9ja2FsbCwgbXVubG9ja2FsbCAmIGFjY3QKICAgICsgc21hbGwgZml4IGZvciBSTElNSVRfKiBhbmQgUlVTQUdFX0JPVEgKICAgICsgZW5oYWNlIHN1cHBvcnQgZm9yIGNhcGdldCBhbmQgY2Fwc2V0CgoyMDAwLTAyLTE5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogdGVzdC92Zm9yay5jOiBuZXcgZmlsZSB0byB0ZXN0IHZmb3JrIHRyYWNlcwogICogdGVzdC8uY3ZzaWdub3JlOiBuZXcgZmlsZQogICogZGVmcy5oOiBVcCBtYXhpbXVtIG51bWJlciBvZiB0cmFjZWQgcHJvY2Vzc2VkIHRvIDY0CiAgKiBzdHJhY2UuYzogRGlzYWJsZSBzb21lIGRlYnVnZ2luZyBjb2RlIGZyb20gZGF2aWRtCiAgKiBpbXBsZW1lbnQgc2V0YXJnIGZvciBtb3JlIGFyY2hpdGVjdHVyZXMKICAqIGltcGxlbWVudCBjaGFuZ2Vfc3lzY2FsbAoKMTk5OS0xMi0yNyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIHN5c2NhbGwuYyAobG9va3VwX3NpZ25hbCwgbG9va3VwX2Rlc2MpOiBpc2RpZ2l0IHJlcXVpcmVzIGFuCiAJX3Vuc2lnbmVkXyBjaGFyIHBhcmFtZXRlci4KCjIwMDAtMDItMTQgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBTMzkwIHVwZGF0ZXMKCjIwMDAtMDItMDMgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBMaW51eC9pYTY0IHBhdGNoZXMKCjIwMDAtMDEtMDIgUGF2ZWwgTWFjaGVrCSAgICAgPHBhdmVsQHVjdy5jej4KCiAgKiBwcm9iZSBpZiBzeXMvcG9sbC5oIGV4aXN0cyBpbiBjb25maWd1cmUgKyBtaW5vciBjbGVhbnVwcwoKICAqIHN5c2NhbGwuYzogc3BsaXQgdHJhY2Vfc3lzY2FsbCBpbnRvIGZldyBwaWVjZXMgdG8gbWFrZSBjb2RlIHJlYWRhYmxlCgoyMDAwLTAxLTIxIFdpY2hlcnQgQWtrZXJtYW4gIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFJlbGVhc2UgdmVyc2lvbiA0LjIgdG8gZ2V0IHRoZSBjdXJyZW50IHVwZGF0ZXMgb3V0IGFuZCBzbwogICAgd2UgY2FuIGNvbmNlbnRyYXRlIGluIGZpbmlzaGluZyB0aGUgY2xvbmUgc3VwcG9ydC4KCjIwMDAtMDEtMTEgV2ljaGVydCBBa2tlcm1hbiAgPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQWRkIDE5MDAgdG8gdG1feWVhciBpbiBzcHJpbnR0aW1lCgoxOTk5LTEyLTI0ICBXaWNoZXJ0IEFra2VybWFuICA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAqIGZpbGUuYzogcHJvdGVjdCBwcmludHN0YXQ2NCB3aXRoIFNUQVQ2NCBpbnN0ZWFkIG9mIGxpbnV4IHNvIHdlIGNhbgogICBjb21waWxlIG9uIExpbnV4IGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBoYXZlIGl0CiAqIHV0aWwuYzogZml4IExPT1AgZm9yIEFSTQoKRnJpIERlYyAyNCAxODowNTowMCBFU1QgMTk5OQoKMTk5OS0xMi0yMyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgogKiBmaWxlLmM6IFVzZSB1Z2x5IGxpYmNfc3RhdCB0cmljayBhbHNvIGZvciBzdGF0NjQuCiAgIEltcGxlbWVudCBzeXNfc3RhdDY0LCBzeXNfZnN0YXQ2NCwgc3lzX2xzdGF0NjQsIGFuZCBwcmludHN0YXQ2NC4KICogcHJvY2Vzcy5jIChpbnRlcm5hbF9jbG9uZSk6IEZpeCBhIGZldyB0eXBvcyBhbmQgYWRkIGRlZmluaXRpb25zIHRvIG1ha2UKICAgaXQgYXQgbGVhc3QgY29tcGlsZS4KICogbGludXgvc3lzY2FsbC5oOiBEZWNsYXJlIHN5c19zdGF0NjQsIHN5c19sc3RhdDY0LCBhbmQgc3lzX2ZzdGF0NjQuCiAqIGxpbnV4L3N5c2NhbGxlbnQuaDogRGVmaW5lIHRhYmxlIGVudHJpZXMgZm9yIHN5c19zdGF0NjQsIHN5c19sc3RhdDY0LAogICBhbmQgc3lzX2ZzdGF0NjQuCiAqIGFjbG9jYWwubTQ6IERlZmluZSBBQ19TVEFUNjQuCiAqIGFjY29uZmlnLmg6IERlZmluZSBIQVZFX1NUQVQ2NC4KICogY29uZmlndXJlLmluOiBBZGQgQUNfU1RBVDY0LgoKVGh1IERlYyAyMyAxNTowMTozNyBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIHBhdGNoIGZyb20gZnRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vbGludXgzOTAvIHRvIGFkZAogICAgc3VwcG9ydCBmb3IgTGludXggb24gdGhlIElCTSBTLzM5MCBhcmNoaXRlY3R1cmUKICAqIHByb2Nlc3MuYzogYWRkIGludGVybmFsX2Nsb25lKCksIGN1cnJlbnRseSBvbmx5IHNob3dzIHRoZSBvcHRpb25zCiAgKiBzeXNjYWxsLmM6IHVzZSBpbnRlcm5hbF9jbG9uZSB0byBoYW5kbGUgU1lTX2Nsb25lCgpNb24gRGVjIDIwIDAwOjI3OjUwIENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogUmV3cml0ZSBtbWFwLWhhbmRsaW5nIHRvIHN1cHBvcnQgbW1hcDIgb24gTGludXgKClR1ZSBEZWMgMTQgMTE6MzU6MTYgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBOb3RlIHRoYXQgTGludXggY2FuIGhhbmRsZSBzeXNfc2Vtb3AoKSBhcyB3ZWxsCgpUdWUgTm92IDMwIDExOjA1OjI2IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogSW5jbHVkZSBsaW51eC9pbjYuaCBmb3IgZ2xpYmMyLjAgYW5kIG9sZGVyCgpNb24gTm92IDI5IDE2OjMzOjA0IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgcGF0Y2hlcyBmcm9tIEpvaG4gSHVnaGVzIHRvIG1ha2UgY29uZmlndXJlIHN1cHBvcnQgVW5peFdhcmUKClNhdCBOb3YgMjcgMjE6Mzg6MTcgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBFbmhhbmNlIHN5c19xdWVyeV9tb2R1bGUKCkZyaSBOb3YgMjYgMTA6NTE6NTUgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBQYXRjaGVzIGZyb20gSm9obiBIdWdoZXM6CiAgICArIGNvc21lY3RpYyBmaXggaW4gc3lzX2dldHBtc2cKICAgICsgYWxsb3cgbmV0LmMgdG8gY29tcGlsZSBvbiBzeXN0ZW1zIHdpdGhvdXQgQUZfSU5FVDYKICAgICsgT25seSB1c2UgbG9uZ190b19zaWdzZXQgb24gTGludXggc3lzdGVtcwogICAgKyBVbml4V2FyZSB0cmVhdHMgc2lnbWFza190IGFuZCBzaWdtYXNrX3QqIGFzIHRoZSBzYW1lIHRoaW5nCiAgICArIEFkZCBwb2xsaGFjawogICAgKyBQYXJzZSBtb3VudCBhcmd1bWVudHMgZm9yIFVuaXhXYXJlCiAgICArIEFDTCBmaXhlcyBmb3IgVW5peFdhcmUKCkZyaSBOb3YgMjYgMDE6Mjg6MDkgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBSZWxlYXNlIDQuMSB0byBnZXQgYWxsIHRoZSBjaGFuZ2VzIG1hZGUgb3V0IHRoZXJlCgpUaHUgTm92IDE4IDE4OjA0OjA0IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2Ugc3RyYWNlZm9yayBmcm9tIEFsZXhleSBLdXpuZXRzb3YgPGt1em5ldEBtczIuaW5yLmFjLnJ1PgogICAgKyBTb2NrZXQgY2FsbHMgcGFyc2VkIGJldHRlcgoJKyBidW5jaCBvZiBhbHBoYSBPU0Ygc3lzY2FsbHMgYWRkZWQKCSsgRml4IGFscGhhIDMyLzY0IGJpdCBpc3N1ZXMKCk1vbiBOb3YgIDEgMjA6NTI6MDggQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNb3ZlIExpbnV4IGtlcm5lbG1vZHVsZS1mdW5jdGlvbnMgZnJvbSBzeXN0ZW0uYyB0byBiam0uYyBhbmQKICAgIHJlbW92ZSBkdXBsaWNhdGUgZm9yIHN5c19jcmVhdGVfbW9kdWxlCiAgKiBMaW51eCBNSVBTIHVwZGF0ZXM6CiAgICArIFBsYXkgd2l0aCAjaWZkZWYncyBpbiBuZXQuYyB0byBnZXQgSVB2NiByaWdodAogICAgKyBVc2UgcHJpbnRhcmdzIGZvciB2bTg2LXN5c2NhbGwKClN1biBPY3QgMzEgMjI6MDM6MDAgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBMaW51eCBtaXBzIHBhdGNoIGZyb20gRmxvcmlhbiBMb2hvZmYgPGZsb0ByZmM4MjIub3JnPgoKTW9uIE9jdCAxMSAwMDozNjoyNSBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBwYXRjaCBmcm9tIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+IHRvIHN5c19xdWVyeV9tb2R1bGUKICAgIGFuZCBzeXNfZGVsZXRlX21vZHVsZSBjb3JyZWN0bHkKCldlZCBPY3QgIDYgMDI6MDA6MzMgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogVXBkYXRlIGN2c2J1aWxkIHRvIGdpdmUgYSBiZXR0ZXIgZXJyb3IgaWYgYXV0b2NvbmYgaXNuJ3QgaW5zdGFsbGVkCiAgKiBBZGQgdGVzdCBmb3IgbGludXgvcHRyYWNlLmggdG8gY29uZmlndXJlCiAgKiBTaW5jZSB3ZSBkZWZpbmUgR05VX1NPVVJDRSBpbiB0aGUgTWFrZWZpbGUgd2UgZG9uJ3QgbmVlZCB0byBkZWZpbmUKICAgIFVTRV9HTlUgaW4gZmlsZS5jIGFueW1vcmUKCkZyaSBTZXAgMTAgMDQ6MzU6MTYgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogI2RlZmluZSBVU0VfR05VIGJlZm9yZSBpbmNsdWRpbmcgZmlsZS5jIHNvIHdlIGdldCBzb21lIGV4dHJhIE9fKiBmbGFncwoKVHVlIEF1ZyAzMSAxNjoyNzoyMSBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBBZGQgbWlzc2luZyB9IGluIElQdjYgb3V0cHV0CgpUdWUgQXVnIDMxIDAxOjIzOjA4IENFU1QgMTk5OSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBVcGRhdGUgY29weXJpZ2h0IGZvciBzdHJhY2UtZ3JhcGggdG8gQlNEIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAogICAgdGhlIHJlc3Qgb2Ygc3RyYWNlCgpNb24gQXVnIDMwIDAwOjUzOjU3IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIHBhdGNoIGZyb20gRGFuaWVsIEphY29ib3dpdHo6IEtFUk5fSkFWQV8qIGFuZCBLRVJOX1NFQ1VSRUxWTCBhcmVuJ3QKICAgIGRlZmluZWQgZm9yIGFsbCBrZXJuZWx2ZXJzaW9ucwogICogQWRkIHN0cmFjZS1ncmFwaCwgd3JpdHRlbiBieSBSaWNoYXJkIEJyYWFrbWFuIDxkYXJrQHhzNGFsbC5ubD4KClRodSBBdWcgMTkgMTM6MTA6MTUgQ0VTVCAxOTk5IEpha3ViIEplbGluZWsgPGpqQHVsdHJhLmxpbnV4LmN6PgoKICAqIGxpbnV4L3NwYXJjL3N5c2NhbGwuaDogRGVjbGFyZSBjcmVhdGVfbW9kdWxlL2luaXRfbW9kdWxlLgogICogY29uZmlndXJlLmluOiBBbGxvdyBjb21waWxhdGlvbiBpbiBhIGRpZmZlcmVudCBkaXJlY3RvcnkKICAgIHRoYW4gdGhlIHNvdXJjZSBvbmUuCiAgKiBzaWduYWwuYzogVXNlIGFzbS9yZWcuaCBhbmQgc3RydWN0IHJlZ3MgaW5zdGVhZCBvZiBwdF9yZWdzCiAgICBzbyB0aGF0IHdlIGRvbid0IGRlcGVuZCBvbiBhc20vcHRyYWNlLmggd2hpY2ggY2xhc2hlcyB3aXRoCiAgICBnbGliYyBzeXMvcHRyYWNlLmguCiAgKiB1dGlsLmM6IExpa2V3aXNlLgogICogc3lzY2FsbC5jOiBMaWtld2lzZS4KCldlZCBBdWcgIDQgMTg6MDE6NTAgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogU3lzY2FsbCA5NCBvbiBMaW51eCBhbHBoYSBpcyBzeXNfcG9sbAoKU3VuIEp1bCAyNSAxNDozODozMyBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBpbiBVbml4V2FyZSBwYXRjaGVzIGZyb20gSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKVGh1IEp1bCAxNSAyMzowMDozMiBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBwYXRjaCBmcm9tIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BkczIucGcuZ2RhLnBsPjoKICAgICsgQ29ycmVjdGx5IGltcGxlbWVudCBmaXggc3lzX2NyZWF0ZW1vZHVsZSAoTGludXgpCiAgICArIEFkZCBsaW1pdGVkIGhhbmRsaWcgb2Ygc3lzX2luaXRtb2R1bGUgKExpbnV4KQoKVHVlIEp1bCAxMyAxNzowNzo1MCBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBBZGQgY29uZmlndXJlLXRlc3QgZm9yIHN5cy9yZWcuaCBhbmQgdXNlIHRoYXQKICAqIFVzZSBzeXMvcmVnLmggaW5zdGVhZCBvZiBhc20vcHRyYWNlLmgKClNhdCBKdWwgMTAgMDE6NDY6MTAgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogUmVtb3ZlIGhhY2sgaW4gc2lnbmFsLmMgZm9yIGFybSBhcmNoaXRlY3R1cmUKICAqIEFkZCBoYWNrIHNvIHdlIGNvbXBpbGUgY29ycmVjdGx5IG9uIHBvd2VycGMKCkZyaSBKdWwgIDkgMDI6Mjg6MTYgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQWRkIGEgY29ycmVjdGVkIHBhdGNoIGZyb20gRGFuaWVsIEphY29ib3dpdHoKClRodSBKdWwgIDggMTY6MDA6MDQgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgcGF0Y2ggZnJvbSBEYW5pZWwgSmFjb2Jvd2l0eiB0byBhbGxvdyB1cyB0byB1c2UgdGhlIGtlcm5lbCB0eXBlcwogICAgZm9yIHRoZSBzdGF0IHN0cnVjdHVyZQoKVGh1IEp1biAyNCAxNTo1NDoxOCBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBGaXggdGVzdCBmb3Igc3lzL3JlZyBpbmNsdWRlCgpUdWUgSnVuIDIyIDE3OjI2OjMzIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEZpeGVkIHNvbWUgTGludXgvcG93ZXJwYyBzaWxseW5lc3MsIHRoYW5rcyB0byBEYW5pZWwgSmFjb2Jvd2l0egogICogRml4ZWQgc29tZSBTdW5PUyBjb21waWxlIHByb2JsZW1zIGVhcmxpZXIgdGhhdCBJIGZvcmdvdCB0byBpbmNsdWRlCiAgICBoZXJlCgpNb24gSnVuIDE0IDEyOjQ0OjI1IENFU1QgMTk5OQoKICAqIEF2b2lkIGxlYWtpbnQgZmQgaW50byBjaGlsZCB3aGVuIGZvcmtpbmcsIHBhdGNoIGZyb20KICAgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCkZyaSBKdW4gMTEgMTQ6NTQ6NDcgQ0VTVCAxOTk5CgogICogQXBwbGllZCBJUklYNjQgcGF0Y2ggZnJvbSBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PgogICogQXBwbGllZCBTb2xhcmlzIGFuZCBtYW5wYWdlIHVwZGF0ZXMgZnJvbSBHdXkgSGFycmlzIDxndXlAbmV0YXBwLmNvbT4KCldlZCBKdW4gIDkgMTQ6NDg6NDkgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQnJvdWdodCBzeXNjYWxsIGxpc3QgZm9yIGFscGhhIHVwIHRvIGRhdGUKCldlZCBKdW4gIDIgMTg6MzA6MTIgQ0VTVCAxOTk5IEpha3ViIEplbGluZWsgPGpqQHVsdHJhLmxpbnV4LmN6PgoKICAqIHN5c3RlbS5jOiBzeXNfdW1vdW50MiBzeXNjYWxsIHN1cHBvcnQuCiAgKiBsaW51eC9zcGFyYy9lcnJub2VudC5oOiBVcGRhdGUgc3BhcmMtbGludXggZXJybm9zLgogICogbGludXgvc3BhcmMvc3lzY2FsbC5oOiBVcGRhdGUgdXNlZCBzcGFyYy1saW51eCBzeXNjYWxscy4KICAqIGxpbnV4L3NwYXJjL3N5c2NhbGxlbnQuaDogTWF0Y2ggMi4yLjkgc3lzdGVtIGNhbGxzLgogICogZmlsZS5jOiBzcGFyYy1saW51eCBhc20vc3RhdC5oIHVzZXMgZGV2X3QgZXRjLiB0eXBlcywKICAgIHNvIGl0IG5lZWRzIHN0cmFjZSdzIG93biBjb3B5IG9mIHRoZSBzdGF0IHN0cnVjdHVyZS4KICAqIHV0aWwuYzogTWFrZSBpdCBjb21waWxlIG9uIHNwYXJjLWxpbnV4LgogICogc3RyYWNlLmM6IEZpeCBzdHJhY2UgLWYgYW5kIC1mZiBvcGVyYXRpb24gb24gc3BhcmMtbGludXguCiAgKiBzaWduYWwuYzogcnRfc2lnYWN0aW9uIGhhcyBkaWZmZXJlbnQgYXJndW1lbnRzIG9uIHNwYXJjKi1saW51eAogICAgYW5kIGFscGhhLWxpbnV4LgogICogc3lzY2FsbC5jOiBSZWNvZ25pemUgc3BhcmM2NC1saW51eCBiaW5hcmllcy4KCkZyaSBNYXkgMjggMjE6MDk6MDAgUFNUIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+CgogICogY29uZmlndXJlLmluOiBGaXggdHlwbyAoQ0ZMQUcgLT4gQ0ZMQUdTKS4KCiAgKiBzeXNjYWxsLmM6IERvbid0IGluY2x1ZGUgbGludXgvcHRyYWNlLmggZXhwbGljaXRseSBmb3IgZ2xpYmMuCgpUaHUgTWF5IDI3IDEzOjU5OjI3IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEFkZCBzb21lIHN5c2N0bCBzdXBwb3J0LCBwYXRjaCBmcm9tIFVscmljaCBEcmVwcGVyCgpXZWQgTWF5IDI2IDAxOjA0OjM0IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFVzZSBrZXJuZWwgZGlyZW50IHN0cnVjdHVyZSBmb3IgTGludXgKClN1biBNYXkgIDkgMDI6MTg6MzAgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgaW4gcGF0Y2hlcyBmcm9tIEFuZHJlYXMgU2Nod2FiIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgogICAgKyBzb21lIGxheW91dCBhbmQgb3RoZXIgbWlub3IgZml4ZXMKICAgICsgYWRkIHNvbWUgbTY4ay1zcGVjaWZpYyB0aGluZ3MgdG8gbGludXgvc3lzY2FsbGVudC5oLiBOb3RlIHRoYXQgbTY4awogICAgICBpcyBzaW1pbGFyIGVub3VnaCB0byBpMzg2IHRvIG5vdCBuZWVkIGl0J3Mgb3duIHN1YmRpcmVjdG9yeQogICAgKyBhZGQgc3VwcG9ydCBmb3Igc2VuZGZpbGUgYW5kIG1yZW1hcCBzeXNjYWxscyBmb3IgTGludXgKICAqIE1lcmdlIGluIHBhdGNoZXMgZnJvbSBTYXNjaGEgU2NodW1hbm4gPHNhc2NoYUBzY2h1bWFubi4ybnMuZGU+CiAgICArIGlvY3Rscy5oIHZzIHN5cy9pb2N0bC5oIG9uIEFscGhhIHBsYXRmb3JtCiAgICArIHBvaW50ZXIgd2FzIGNhc3RlZCB0byBhbiBpbnQgaW4gc3RyZWFtLmMKICAgICsgc3Ryc2lnbmFsKCkgbmVlZHMgLURfR05VX1NPVVJDRSBpbiBDRkxBR1MKICAgICsgc2V2ZXJhbCBvdGhlciBjYXN0cyBjaGFuZ2VkCiAgICArIGNvcnJlY3QgQVJNL1BPV0VSUEMgYXJjaGl0ZWN0dXJlIGRlZmluZXMgaW4gYWNjb25maWcuaAogICogTWVyZ2UgaW4gcGF0Y2hlcyBmcm9tIE1vcnRlbiBXZWxpbmRlciA8dGVycmFAZGlrdS5kaz4KICAgICsgYWRkIHNvbWUgYXV0b2NvbmYtdGVzdHMgZm9yIGluY2x1ZGVmaWxlcwogICAgKyBoYW5kbGUgc29sYXJpcyB2ZXJzaW9uIG9mIHNpZ2NvbnRleHQgc3RydWN0IChhY3R1YWxseSBJIGhhY2tlZCB0aGlzCiAgICAgIHVwIGFnYWluLCBidXQgdGhlIGlkZWEgaXMgaGlzIDopCgpTdW4gQXByIDE4IDIyOjMyOjQyIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFVwZGF0ZSBzeXNjYWxscyBmb3IgbGludXggYWxwaGEsIHBhdGNoIGZyb20gQmFydCBXYXJtZXJkYW0KICAgIDxiYXJ0d0BkZWJpYW4ub3JnPgogICogVXBkYXRlIHNwYXJjIGNvZGUgc28gaXQgYWN0dWFsbHkgY29tcGlsZXMKCkZyaSBBcHIgMTYgMDI6MTg6MDUgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQWRkIHN1cHBvcnQgZm9yIG9sZF8qc3RhdCBmdW5jdGlvbnMgZm9yIExpbnV4LiBQbGVhc2Ugbm90ZSB5b3UgbmVlZAogICAgdG8gdXNlIHJlYXNvbmFibHkgcmVjZW50IGtlcm5lbCBoZWFkZXJzIHRvIGNvbXBpbGUgc3RyYWNlIG5vdy4KICAqIENoYW5nZSByZWZlcmVuY2VzIHRvIExJTlVYIGludG8gbGludXggaW4gZmlsZS5jCiAgKiBGaXggaW5jbHVkZSBmb3IgTERUIGluIG1lbS5jCgpUaHUgQXByIDE1IDIyOjI4OjE1IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIENoYW5nZSBpbiBzdHJhY2UgbWFpbnRhaW5lcnNoaXAsIGpycyBwYXNzZWQgdGhlIHRvcmNoIHRvIG1lLgogICogVXNlIGF1dG9jb25mIDIuMTMKICAqIEluY29ycG9yYXRlIGFsbCBjaGFuZ2VzIGFscmVhZHkgbWFkZSBpbiB0aGUgRGViaWFuIHN0cmFjZSBwYWNrYWdlOgogICAgKyBjb21waWxlcyB3aXRoIG1vcmUgTGludXgga2VybmVscwogICAgKyBhZGRlZCBzdXBwb3J0IGZvciBtb3JlIExpbnV4IGFyY2hpdGVjdHVyZXMKICAgICsgYWRkIHN1cHBvcnQgZm9yIGEgbG90IG9mIGV4dHJhIHN5c2NhbGxzCiAgICArIGZpeCBzb21lIHByb2JsZW1zIHdpdGggaGFuZ2luZyBjaGlsZHJlbgogICAgKyBjaGVjayBzdHJheSBzeXNjYWxsIGFmdGVyIGV4ZWN2CiAgICArIGRlY29kZSBjYXBnZXQgYW5kIGNhcHNldCBhcmd1bWVudHMKICAgICsgYWRkIG1vcmUgY29uc3RhbnRzIHRvIG5ldC5jCiAgICArIGRldGVjdCBST1NFIG5ldHdvcmtpbmcKICAgICsgYWRkIG1vcmUgcHJvdG9jb2wgZmFtaWxpZXMgdG8gZG9tYWlucwogICAgKyBhZGQgSVBJUCBwcm90b2NvbAogICAgKyBhZGRlZCBNU0dfUFJPWFkgYW5kIE1TR19DVFJVTkMgdG8gbXNnX2ZsYWdzCiAgICArIGFkZGVkIFNPX0JTRENPTVBBVCBhbmQgU09fUkVVU0VQT1JUIHRvIHNvY2tvcHRpb25zCiAgICArIGFkZGVkIElQLCBJUFggYW5kIFRDUC1vcHRpb25zCiAgICArIGFkZGVkIElQLCBJUFggYW5kIFRDUCBzdXBwb3J0IHRvIGdldC0vc2V0c29ja29wdCgpCiAgICArIGFkZGVkIElQWCBzdXBwb3J0CiAgICArIHVwZGF0ZWQgaGFuZGxpbmcgb2Ygc2lnbmFscwoKU3VuIE9jdCAyNyAyMjoyODowMCAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHV0aWwuYyAodW1vdmVzdHIpIFtMSU5VWF06IEhhbmRsZSBMaW51eCBsaWtlIFN1bk9TNAoJaW5zdGVhZCBvZiBTVlI0LiAgVGhhdCBpcywgcmVhZCBhIGZldyBieXRlcyBhdCBhIHRpbWUKCXRvIGF2b2lkIG92ZXJydW5uaW5nIHRoZSBlbmQgb2YgdGhlIHN0YWNrLgoKRnJpIE1heSAzMSAwMTo0ODo0OSAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjEgaXMgcmVsZWFzZWQuCgpUaHUgTWF5IDIzIDAxOjA0OjQzIDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogYWNsb2NhbC5tNCAoQUNfREVDTF9TWVNfRVJSTElTVCk6IFRyeSBsb29raW5nIGluIHN0ZGlvLmgKCWFzIHdlbGwgc2luY2UgdGhhdCdzIHdoZXJlIGdsaWJjIGRlY2xhcmVzIGl0LiAgR28gZmlndXJlLgoJKiBzaWduYWwuYyAoc3lzX3NpZ3JldHVybikgW0FMUEhBXTogVXNlIHNpZ2NvbnRleHQKCWluc3RlYWQgb2Ygc2lnY29udGV4dF9zdHJ1Y3Qgc2luY2UgZ2xpYmMgdjUrIGFwcGFyZW50bHkKCXBsYXlzIGdhbWVzIHdpdGggdGhlIG5hdGl2ZSBPUyBuYW1lc3BhY2UuCglGcm9tIERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AQVpTdGFyTmV0LmNvbT4uCgpNb24gTWF5IDIwIDIzOjE3OjE0IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC4xNCBpcyByZWxlYXNlZC4KCgkqIGFjbG9jYWwubTQgKEFDX1NUUlVDVF9NU0dfQ09OVFJPTCk6IE5ldyBtYWNyby4KCSogY29uZmlndXJlLmluOiBBZGQgY2FsbCB0byBBQ19TVFJVQ1RfTVNHX0NPTlRST0wuCgkqIG5ldC5jIChwcmludG1zZ2hkcik6IEhhbmRsZSBCU0QgNC4zIGFuZCA0LjQgbXNnaGRyIG1lbWJlcnMKIAlkaWZmZXJlbnRseS4KCVJlcG9ydGVkIGJ5IEhlbnJpayBTdG9ybmVyIDxzdG9ybmVyQG9zaXJpcy5waW5nLmRrPi4KCgkqIGNvbmZpZ3VyZS5pbjogKEFDX0NIRUNLX3tIRUFERVJTLEZVTkNTfSk6IEFkZCBjaGVja3MgZm9yCiAJc3lzL2ZpbGlvLmggYW5kIHN5cy9zdHJlYW0uaCBhbmQgcmVtb3ZlIGNoZWNrIGZvciBwb2xsLgoJKiBkZXNjLmMgKGRlY29kZV9zZWxlY3QsIHN5c19zZWxlY3QsIHN5c19vbGRzZWxlY3QpIFtMSU5VWF06CiAJSGFuZGxlIG9sZCBhbmQgbmV3IHN0eWxlcyBvZiBhcmd1bWVudCBwYXNzaW5nIGZvciBzZWxlY3Qgb24gTGludXguCgkqIGlvY3RsLmMsIHN0cmVhbS5jOiBDb25kaXRpb25hbGl6ZSBzdHJlYW0gY29kZSBvbiBwcmVzZW5jZSBvZgoJc3lzL3N0cmVhbS5oIGluc3RlYWQgb2YgcG9sbCBiZWNhdXNlIGdsaWJjIGltcGxlbWVudHMgcG9sbCBidXQKCW5vdCB0aGUgcmVzdCBvZiB0aGUgc3RyZWFtIGludGVyZmFjZS4KCSogc2lnbmFsLmMgW0xJTlVYXTogU3RhbmRhcmRpemUgb24gdGhlIG5hbWUgc2lnY29udGV4dF9zdHJ1Y3QuCgkoc3lzX3NpZ3Byb2NtYXNrKSBbQUxQSEFdOiBIYW5kbGUgT1NGIGZsYXZvciB3aGljaCBpcyBtb3JlIGxpa2UKCXNpZ3NldG1hc2suCgkqIHRlcm0uYyAodGVybV9pb2N0bCk6IFVzZSBfVk1JTiwgaWYgcHJlc2VudCwgZm9yIFRDe0csU31FVEEqLgoJKiB1dGlsLmMgKHVtb3ZlbiwgdW1vdmVzdHIpOiBNb3ZlIGRhdGEgaW4gbG9uZy1zaXplZCBjaHVua3MKCWF0IGEgdGltZSwgaW5zdGVhZCBvZiBoYXJkIGNvZGluZyBpdCB0byBiZSA0LgoJRnJvbSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQEFaU3Rhck5ldC5jb20+LgoKTW9uIE1heSAyMCAwMToxOTozNiAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMTMgaXMgcmVsZWFzZWQuCgoJKiBjb25maWd1cmUuaW4gKEFDX0NIRUNLX0hFQURFUlMpOiBBZGQgY2hlY2sgZm9yIGFzbS9zaWdjb250ZXh0LmguCgkqIHNpZ25hbC5jIFtIQVZFX0FTTV9TSUdDT05URVhUX0hdOiBDb25kaXRpb25hbGx5IGluY2x1ZGUKCWFzbS9zaWdjb250ZXh0LmggdG8gZGVmaW5lIHNpZ2NvbnRleHRfc3RydWN0IGFuZCBkb24ndCBkZWZpbmUgaXQKCWxvY2FsbHkgaWYgdGhlIGhlYWRlciBpcyBwcmVzZW50LgoKCSogc3lzY2FsbC5jIChuZXJybm9zezAsMn0pOiBDb3JyZWN0IHNpemUgY29tcHV0YXRpb24uCgoJKiBNYWtlZmlsZS5pbjogUmVtb3ZlIGRlcGVuZGVuY2llcyBhbmQgcnVsZXMgcmVsYXRpbmcgdG8gZmlsZXMKIAlub3JtYWxseSBmb3VuZCBpbiB0aGUgb3MgZGlyZWN0b3J5LiAgQmVjYXVzZSBvZiB0aGUgbmV3IHNjaGVtZSB3ZQogCWRvbid0IGtub3cgcHJlY2lzZWx5IHdoZXJlIHRoZXkgY29tZSBmcm9tLiAgU2lnaC4KCSogc2lnbmFsZW50LnNoOiBNYWtlIGl0IHdvcmsgZm9yIHN1bm9zNCwgbGludXgsIGFuZCBzdnI0LgoJKiB7c3Vub3M0LGxpbnV4eywvYWxwaGF9LHN2cjR9L01ha2VmaWxlLmluOiBNYWtlIHJ1bGVzIGNvcnJlc3BvbmQKIAl0byB0cmFkaXRpb25hbCBtYWtlIHN5bnRheC4gIEFkZCBzaWduYWxlbnQuaCB0byBmaWxlcyB3aGljaCBjYW4KIAl1bmNvbmRpdGlvbmFsbHkgYmUgcmVidWlsdC4gIFByZXZlbnQgc2lnbmFsZW50LmggZnJvbSBiZWluZwogCXVuY29uZGl0aW9uYWxseSBiZWluZyByZWJ1aWx0IHNpbmNlIGl0J3MgY3VzdG9taXplZC4KCSoge3N1bm9zNCxsaW51eHssL2FscGhhfSxzdnI0fS97aW9jdGxlbnQsZXJybm9lbnQsc2lnbmFsZW50fS5oOgogCVVzZSB2ZXJzaW9ucyBidWlsdCBieSB7aW9jdGxlbnQsZXJybm9lbnQsc2lnbmFsdGVudH0uc2guCiAgCSogc3Vub3M0L2lvY3RsZW50LnNoOiBXb3JrIGFyb3VuZCBzcHJpbnRmIHRyb3VibGVzIHdpdGggU3VuT1MKIAk0LjEuNCBhbmQgZ2NjIDIuNy4yLgoKU3VuIE1heSAxOSAxNzoxNDowOSAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuaW46IEFkZCBPU0FSQ0ggY29uY2VwdCB0byBmaW5pc2gKCWJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBhbHBoYS4KCSogTWFrZWZpbGUuaW4sIGxpbnV4L01ha2VmaWxlLmluOiBSZXdyaXRlIGNsZWFuLCBkaXN0Y2xlYW4sCglhbmQgbWFpbnRhaW5lci1jbGVhbiBydWxlcy4KCSogZGVmcy5oLCBpb2N0bHNvcnQuYzogTWFrZSBpb2N0bCBjb2RlIG1lbWJlciB1bnNpZ25lZC4KCSogaW9jdGwuYywgaW9jdGxzb3J0LmMgKGNvbXBhcmUpOiBQZXJmb3JtIGV4cGxpY2l0IGNoZWNraW5nCglmb3IgbGVzcywgZ3JlYXRlciwgYW5kIGVxdWFsIHNpbmNlIHN1YnRyYWN0aW9uIG9uIHR3bydzCgljb21wbGVtZW50IG51bWJlcnMgaXNuJ3QgYW4gb3JkZXIgcmVsYXRpb24gKGl0IGlzbid0IHRyYW5zaXRpdmUpIQoJKiBsaW51eC9NYWtlZmlsZS5pbjogQWRkIHJ1bGVzIGZvciB0aGUgc2lnbmFsZW50LmggZmlsZS4KCSogbGludXgvYWxwaGEvTWFrZWZpbGUuaW46IE5ldyBmaWxlLgoKU3VuIE1heSAxOSAwMToxMjoyOCAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMTIgaXMgcmVsZWFzZWQuCgoJKiBsaW51eHssYWxwaGF9L2lvY3RsZW50LnNoOiBUd2VhayBmb3IgcmVjZW50IGtlcm5lbHMuCglGcm9tIE1pY2hhZWwgRSBDaGFzdGFpbiA8bWVjQGR1cmFjZWYuc2hvdXQubmV0Pi4KCgkqIGRlZnMuaCAoU1VQUE9SVEVEX1BFUlNPTkFMSVRFUywgREVGQVVMVF9QRVJTT05BTElUWSk6IE5ldy4KCSogc3lzY2FsbC5jIChzZXRfcGVyc29uYWxpdHkpOiBOZXcuCgkqIHN0cmFjZS5jIChtYWluKTogQ2FsbCBzZXRfcGVyc29uYWxpdHkuCiAJKiBkZWZzLmgsIHN5c2NhbGwuYywgaW9jdGwuYywgc2lnbmFsLmM6IE1ha2Ugc3lzZW50LCBlcnJub2VudCwKIAlpb2N0bGVudCwgYW5kIHNpZ25hbGVudCBpbmRpcmVjdCBwb2ludGVycyBhbmQgcmVkaXJlY3QgdGhlbQoJYmFzZWQgb24gcGVyc29uYWxpdHkuCgkqIHtzdW5vczQsc3ZyNCxsaW51eHssL2FscGhhfX0vc2lnbmFsZW50Lmg6IE5ldyBmaWxlcy4KCVN1Z2dlc3RlZCBieSBUb20gRHlhcyA8dGR5YXNAZWRlbi5ydXRnZXJzLmVkdT4uCgoJKiB1dGlsLmMgKHVwZWVrKTogSGFuZGxlIGNhc2Ugd2hlcmUgcHRyYWNlIHJldHVybnMgYSBsb25nCglhbmQgc2l6ZW9mKGxvbmcpICE9IHNpemVvZihpbnQpLgoJRnJvbSBSaWNoYXJkIEhlbmRlcnNvbiA8cmljaGFyZEB0d2lkZGxlLnRhbXUuZWR1PgoKRnJpIE1heSAxNyAyMTowMzozNiAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMTEgaXMgcmVsZWFzZWQuCgoJKiBtYW55IGZpbGVzOiBGaXggbW9yZSBwcmludGYgd2FybmluZ3MgZm9yIG90aGVyIHBsYXRmb3Jtcy4KCgkqIGlwYy5jIChzeXNfbXNncmN2KSBbTElOVVhdOiBDb25kaXRpb25hbGl6ZSBkZWZpbml0aW9uIG9mIGlwY193cmFwcGVyLgoKCSogbGludXgvZHVtbXkuaDogSGFuZGxlIG1pc3NpbmcgbGlicmFyeSBzdXBwb3J0IGZvciB7c2VuZCxyZWN2fW1zZy4KCVJlcG9ydGVkIGJ5IFRob21hcyBCb2dlbmRvZXJmZXIgPHRzYm9nZW5kQGJpZ2J1Zy5mcmFua2VuLmRlPi4KCgkqIGxpbnV4L3N5c2NhbGwuaCAoc3lzX3V0aW1lcyk6IEZpeCBhIHR5cG8gaW4gdGhlIGRlY2xhcmF0aW9uLgoJRnJvbSBUaG9tYXMgQm9nZW5kb2VyZmVyIDx0c2JvZ2VuZEBiaWdidWcuZnJhbmtlbi5kZT4uCgpGcmkgTWF5IDE3IDAwOjUwOjA2IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC4xMCBpcyByZWxlYXNlZC4KCgkqIE1ha2ZpbGUuaW46IEFkZCBvcy9hcmNoIHRvIGluY2x1ZGVzIHNvIHRoYXQgYSBnaXZlbiBhcmNoCgkobGlrZSBhbHBoYSkgY2FuIG92ZXJyaWRlIHRoZSBuYXRpdmUgYXJjaCAobGlrZSBpMzg2KS4KCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc2VuZG1zZy4KCgkqIG5ldC5jOiBNYWtlIHNlbmRtc2cgYW5kIHJlY3Ztc2cgZGVwZW5kZW50IG9uIGFuIGF1dG9jb25mCgl0ZXN0LiAgUmVwb3J0ZWQgYnkgTWljaGFlbCBFIENoYXN0YWluIDxtZWNAZHVyYWNlZi5zaG91dC5uZXQ+LgoKCSogYWNjb25maWcuaCwgY29uZmlndXJlLmluOiBEZXRlY3QgdGhlIGFscGhhLgoJKiBpb2N0bC5jOiBIYW5kbGUgdGhlIGFscGhhLgoJKiBkZWZzLmg6IE1ha2Ugc29tZSBtZW1iZXJzIGxvbmcgZm9yIHRoZSBhbHBoYS4gIERlZmluZQoJc29tZSByZWdpc3RlciBuaWNrbmFtZXMuICBBZGQgc3VwcG9ydCBmb3IgV0FJVEVYRUNWRS4KCSogZmlsZS5jIFtBTFBIQV06IFN1cHBvcnQgdGhlIGFscGhhIGZvciBzdGF0ZnMuICBBZGQKCW9zZl9zdGF0ZnMgYW5kIG9zZl9mc3RhdGZzIGZvciB0aGUgYWxwaGEuICBNYWtlIGRhbW4gc3VyZQoJbWFqb3IgYW5kIG1pbm9yIHJlc3VsdHMgYXJlIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIHByaW50Zi4KCSogc2lnbmFsLmMsIHN5c2NhbGwuYzogU3VwcG9ydCB0aGUgYWxwaGEuCgkqIHByb2Nlc3MuYzogQWRkIGFscGhhIHVzZXIgb2Zmc2V0cy4KCSogbW9zdCBmaWxlczogVXNlICVsPyBmb3IgcHJpbnRmIGFyZ3VtZW50cyBzaW5jZQoJbW9zdCBhcmUgbm93IGxvbmdzIGZvciB0aGUgYWxwaGEuCgkqIGxpbnV4L2FscGhhL3tlcnJub2VudC5oLGlvY3RsZW50LntoLHNofSxzeXNjYWxsZW50Lmh9OgoJTmV3IGZvciB0aGUgYWxwaGEuCglGcm9tIFRob21hcyBCb2dlbmRvZXJmZXIgPHRzYm9nZW5kQGJpZ2J1Zy5mcmFua2VuLmRlPi4KCldlZCBNYXkgMTUgMDA6Mjk6MzcgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjkgaXMgcmVsZWFzZWQuCgoJKiBjb25maWcuaW4sIGNvbmZpZy5zdWIsIGluc3RhbGwtc2g6IFVwZ3JhZGUgdG8gYXV0b2NvbmYgMi4xMC4KCgkqIGxpbnV4L2R1bW15LmgsIGxpbnV4L3N5c2NhbGxlbnQuaCwgbGludXgvc3lzY2FsbC5oOiBBZGQgcmVjZW50CglMaW51eCBrZXJuZWwgdmVyc2lvbiBzeXN0ZW0gY2FsbHMuCgpXZWQgTWFyIDEzIDAxOjAzOjM4IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogaXBjLmMgW1NVTk9TNF06IEFkZCBTdW5PUyBzdXBwb3J0IGZvciBkZWNvZGluZyBJUEMgY2FsbHMuCgkqIHN5c2NhbGwuYyBbU1VOT1M0XTogQ29tcGlsZSBkZWNvZGVfc3ViY2FsbCBvbiBTdW5PUyBhbmQKCWRlY29kZSBJUEMgY2FsbHMgdXNpbmcgaXQuCgkqIHN1bm9zNC9kdW1teS5oOiBBbGlhcyBzeXNfc2Vtb3AgdG8gcHJpbnRhcmdzLgoJKiBzdW5vczQvc3lzY2FsbC5oOiBBZGQgbmV3IHBzZXVkbyBzeXNjYWxscyBmb3IgSVBDLgoJKiBzdW5vczQvc3lzY2FsbGVudC5oOiBJbmNsdWRlIG5ldyBzdWJjYWxscyBmb3IgSVBDLgoJRnJvbSBNYXR0aGlhcyBQZmFsbGVyIDxsZW9AZGFjaGF1Lm1hcmNvLmRlPi4KClR1ZSBGZWIgMTMgMjI6MDg6MjUgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjggaXMgcmVsZWFzZWQuCgoJKiB0aW1lLmMgW0xJTlVYXTogRXhwbGljaXRseSBpbmNsdWRlIGxpbnV4L3ZlcnNpb24uaC4KCgkqIHN0cmFjZS5jIChtYWluKTogRG9uJ3QgbGV0IHRoZW0gZXZlbiAqdHJ5KiB0bwoJZ2V0IHN0cmFjZSB0byBhdHRhY2ggdG8gaXRzZWxmIHNpbmNlIHNvbWUgc3lzdGVtcwoJZG9uJ3QgaGFuZGxlIHRoaXMgY2FzZSB2ZXJ5IGdyYWNlZnVsbHkuCglSZXBvcnRlZCBieSBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGNhaXAucnV0Z2Vycy5lZHU+LgoKCSogTWFrZWZpbGUuaW4gKGRpc3RjbGVhbik6IEZpeCBpdCBmb3Igc3ViZGlyZWN0b3JpZXMuCgoJKiBzdW5vczQvc3lzY2FsbGVudC5oLCBzdnI0L3N5c2NhbGxlbnQuaDogRmlsbCBpbiB0aGUgbmV3CglzeXNfZmxhZ3MgbWVtYmVyIGZvciBlYWNoIGRlZmluZWQgc3lzdGVtIGNhbGwuCgpGcmkgRGVjICA4IDAxOjE3OjI4IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogZGVmcy5oIChUUkFDRV8qKTogTmV3IGZsYWdzIHRvIGRlc2NyaWJlIHdoYXQgY2xhc3MKCW9mIHN5c3RlbSBjYWxsIGVhY2ggc3lzdGVtIGNhbGwgaXMuCgkoc3lzZW50KTogQWRkIHN5c19mbGFncyBtZW1iZXIuCgkqIHN5c2NhbGwuYyAoc3lzZW50KTogRGVmaW5lIChhbmQgbGF0ZXIgdW5kZWYpIGFiYnJldmlhdGlvbnMKCWZvciB0aGUgc3lzdGVtIGNhbGwgY2xhc3MgZmxhZ3MuCgkobG9va3VwX2NsYXNzKTogTmV3IGZ1bmN0aW9uIHRvIHRyYW5zbGF0ZSBzdHJpbmdzIHRvCglzeXN0ZW0gY2FsbCBjbGFzcyBmbGFncy4KCShxdWFsaWZ5KTogSGFuZGxlIG5ldyBzeXN0ZW0gY2FsbCBjbGFzcyBtZWNoYW5pc20uCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogRmlsbCBpbiB0aGUgbmV3IHN5c19mbGFncyBtZW1iZXIKCWZvciBlYWNoIGRlZmluZWQgc3lzdGVtIGNhbGwuCgoJKiBkZWZzLmggKHByaW50X3NvY2spOiBSZW1vdmUgcmVkdW5kYW50IGFuZCBub24tSyZSIEMKCWNvbXBhdGlibGUgcHJvdG90eXBlLiAgRnJvbSBKdWVyZ2VuIFdlaWdlcnQKCTxqbndlaWdlckBpbW1kNC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4uCgpUaHUgRGVjICA3IDAxOjE3OjQwIDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogbGludXgvaW9jdGxlbnQuc2g6IFR3ZWFrIHRvIGltcHJvdmUgaW9jdGwgYWNjdXJhY3kuCglGcm9tIE1pY2hhZWwgRSBDaGFzdGFpbiA8bWVjQGR1cmFjZWYuc2hvdXQubmV0Pi4KCgkqIHN5c3RlbS5jIChpbmNsdWRlcykgW0xJTlVYXTogQWRkIGxpbnV4L25mcy5oIGZvciByZWNlbnQKCWtlcm5lbHMuICBGcm9tIE1pY2hhZWwgRSBDaGFzdGFpbiA8bWVjQGR1cmFjZWYuc2hvdXQubmV0Pi4KCldlZCBEZWMgIDYgMjE6NTI6MjggMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBmaWxlLmMgKHNwcmludGZzdHlwZSk6IEVuY2xvc2Ugc3RyaW5nIHJlc3VsdCBpbiBkb3VibGUKCXF1b3Rlcy4KCgkqIHRpbWUuYyAoc3lzX2FkanRpbWV4KSBbTElOVVhdOiBDb25kaXRpb25hbGl6ZQoJY29uc3RhbnRseSBldm9sdmluZyB0aW1leCBzdHJ1Y3R1cmUuCglGcm9tIEFhcm9uIFVja28gPFVDS09AVkFYMS5ST0NLSFVSU1QuRURVPi4KCgkqIGRlZnMuaCwgc3lzY2FsbC5jLCBzdHJhY2UuYzogUmVuYW1lIHN5c2NhbGwgdG8KCXRyYWNlX3N5c2NhbGwgYW5kIGNoYW5nZSBwcm90b3R5cGUgYW5kIGFsbCBjYWxsZXJzCgliZWNhdXNlIG9mIGJyb2tlbiBMaW51eCBzaGFyZWQgbGlicmFyaWVzLgoJRnJvbSBBYXJvbiBVY2tvIDxVQ0tPQFZBWDEuUk9DS0hVUlNULkVEVT4uCgoJKiBNYWtlZmlsZS5pbiAoY2xlYW4pOiBDaGVjayBmb3IgYSBmaWxlIHdpdGggdGVzdCAtZiBub3QKCXRlc3QgLWQuICBGcm9tIEFhcm9uIFVja28gPFVDS09AVkFYMS5ST0NLSFVSU1QuRURVPi4KClR1ZSBTZXAgMjYgMDI6MzI6MzEgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjcgaXMgcmVsZWFzZWQuCgoJKiB1dGlsLmMgKHN0cmluZ19xdW90ZSk6IEZpeCB0aGlua28gd2hpY2ggY2F1c2VkIGNvcmUKCWR1bXBzIGZvciBzdHJpbmdzIHdpdGggcXVvdGVzIGluIHRoZW0uCglSZXBvcnRlZCBieSBNYXJ0eSBMZWlzbmVyIDxsZWlzbmVyQHNkc3AubWMueGVyb3guY29tPi4KCgkqIGxpbnV4L01ha2VmaWxlLmluIChlcnJub2VudC5oIHJ1bGUpOiBHcmFiIGFsbCBlcnJuby5oCglmaWxlcyBmcm9tIC91c3IvaW5jbHVkZSwgbm90IGp1c3QgdGhlIGxpbnV4IG9uZS4KCUZyb20gTWljaGFlbCBFIENoYXN0YWluIDxtZWNAZHVyYWNlZi5zaG91dC5uZXQ+LgoKCSogbGludXgvZXJybm9lbnQuc2g6IFRvdGFsIHJld3JpdGUgdG8gaGFuZGxlIG1vcmUgaW9jdGxzIHdpdGgKCWZld2VyIGZhbHNlIHBvc2l0aXZlcyBvbiBtb3JlIGtlcm5lbCBmbGF2b3JzLgoJRnJvbSBNaWNoYWVsIEUgQ2hhc3RhaW4gPG1lY0BkdXJhY2VmLnNob3V0Lm5ldD4uCgpNb24gU2VwICA0IDAxOjI5OjIyIDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC42IGlzIHJlbGVhc2VkLgoKCSogbGludXgvZHVtbXkuaCwgbGludXgvc3lzY2FsbC5oLCBsaW51eC9zeXNjYWxsZW50Lmg6IEFkZAoJc3lzX21zeW5jLgoJKiBtZW0uYyAobWN0bF9mdW5jcywgbWN0bF9sb2NrYXMsIHN5c19tY3RsKTogQ29uZGl0aW9uYWxpemUKCW9uIE1DX1NZTkMgaW5zdGVhZCBvZiBIQVZFX01DVEwuCgkobWN0bF9zeW5jKTogQ29uZGl0aW9uYWxpemUgb24gTVNfQVNZTkMgaW5zdGVhZCBvZiBIQVZFX01DVEwuCgkoc3lzX21zeW5jKTogTmV3IGZ1bmN0aW9uLgoKU2F0IFNlcCAgMiAxMjowNjowNCAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGxpbnV4L2R1bW15LmgsIGxpbnV4L3N5c2NhbGwuaCwgbGludXgvc3lzY2FsbGVudC5oOiBBZGQKCXN5c19mbG9jayBhbmQgc3lzX2dldGRlbnRzLgoJKiBkZXNjLmMgKGZsb2NrY21kcywgc3lzX2Zsb2NrKTogQ29uZGl0aW9uYWxpemUgb24gTE9DS19TSAoJbm90IFNVTk9TNC4KCSogZmlsZS5jIChzeXNfZ2V0ZGVudHMpOiBEZWZpbmUgdW5jb25kaXRpb25hbGx5IGFuZCBoYW5kbGUKCUxJTlVYIGNhc2UuCgkqIHN0cmFjZS5jIChtYWluKTogRGlzYWxsb3cgdXNlcm5hbWUgb3B0aW9uIHVubGVzcyBib3RoIHJlYWwKCWFuZCBlZmZlY3RpdmUgdWlkcyBhcmUgcm9vdC4KCldlZCBBdWcgMzAgMDE6Mjk6NTggMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBzdHJhY2UuYyAobWFpbik6IEVuc3VyZSB0aGF0IHJ1bl91aWQgYW5kIHJ1bl9naWQgYXJlCglhbHdheXMgc2V0IHRvIHNvbWV0aGluZyBtZWFuaW5nZnVsLgoJKG1haW4sIG5ld291dGYpIFshU1ZSNF06IFN3YXAgcmVhbCBhbmQgZWZmZWN0aXZlIHVpZHMgd2hpbGUKCW9wZW5pbmcgYW55IG91dHB1dCBmaWxlcy4KCShtYWluKSBbIVNWUjRdOiBUcmVhdCBlZmZlY3RpdmUgdWlkIG9mIHJvb3QgYXMgYSByZXF1ZXN0Cgl0byBoYW5kbGUgc3VpZCBiaW5hcmllcyBjb3JyZWN0bHkgdXNpbmcgdGhlIHJlYWwgdWlkIG9mCgl0aGUgaW52b2tpbmcgdXNlci4KClNhdCBBdWcgMTkgMDA6MDY6MDggMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBNYWtlZmlsZS5pbjogQWRkIGB8fCB0cnVlJyB0byBjbGVhbiBydWxlIGJlY2F1c2UKCWFsdGhvdWdoIEdOVSBtYWtlIDMuNzQgdXNlcyBgc2ggLWMnIHRvIGludm9rZSBjb21tYW5kcwoJZXZlcnkgb3RoZXIgbWFrZSBpbiB0aGUgd29ybGQgdXNlcyBgc2ggLWVjJy4KCgkqIHN5c2NhbGwuYyAoc3lzY2FsbCkgW1NWUjQsIE1JUFNdOiBUaGUgZmlmdGggYW5kIHN1YnNlcXVlbnQKCWFyZ3VtZW50cyBhcHBlYXIgdG8gYmUgc3RvcmVkIG9uIHRoZSBzdGFjaywgbm90IGluIHRoZQoJcmVnaXN0ZXJzIGZvbGxvd2luZyBBMyAoZW1waXJpY2FsIHJlc3VsdCkuCgoJKiBkZWZzLmg6IEFkZCBwcm90b3R5cGUgZm9yIHByaW50c29jay4KCSogc3ZyNC9kdW1teS5oOiBSZW1vdmUgZ2VuZXJpYyBoYW5kbGluZyBvZiBzeXNfbW91bnQuCgkqIHN5c3RlbS5jIFtTVlI0LCBNSVBTXTogSW5jbHVkZSBzZXZlcmFsIHN5c3RlbSBoZWFkZXJzIHRvIGNsZWFubHkKCWdldCBhY2Nlc3MgdG8gU0dJIG1vdW50IGluZm9ybWF0aW9uLgoJKG1vdW50X2ZsYWdzLCBuZnNfZmxhZ3MpIFtTVlI0LCBNSVBTXTogTmV3IG9iamVjdHMuCgkoc3lzX21vdW50KSBbU1ZSNCwgTUlQU106IE5ldyBmdW5jdGlvbi4KCShzeXNfbW91bnQpIFtTVlI0LCAhTUlQU106IE5ldyBmdW5jdGlvbi4KClR1ZSBKdWwgIDQgMDA6MzA6MzQgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjUgaXMgcmVsZWFzZWQuCgoJKiBkZXNjLmMsIHJlc291cmNlLmMsIHN0cmFjZS5jLCBzeXNjYWxsLmMsIHRpbWUuYzogQ2FzdCB0dl9zZWMgYW5kCiAJdHZfdXNlYyBtZW1iZXJzIHRvIGxvbmcgd2hlbiB1c2luZyBwcmludGYuCgoJKiBpcGMuYzogT21pdCBkZWZpbmUgb2YgX19LRVJORUxfXy4KCSh7TVNHLFNFTSxTSE19X3tTVEFULElORk99KTogRXhwbGljaXRseSBkZWZpbmUgdGhvc2UgdGhpbmdzIHdlCiAJd2FudCB3aGljaCBfX0tFUk5FTF9fIHVzZWQgdG8gcHJvdmlkZS4KCShzeXNfbXNncmN2KTogQ2hhbmdlIHJlZmVyZW5jZSB0byBpcGNfa2x1ZGdlIHN0cnVjdHVyZSB0bwoJbG9vay1hbGlrZSBpcGNfd3JhcHBlciB0byBhdm9pZCBkZXBlbmRlbmNlIG9uIF9fS0VSTkVMX18uCgoJbWVtLmMgKG1tYXBfZmxhZ3MpIFtNQVBfe0dST1dTRE9XTixERU5ZV1JJVEUsRVhFQ1VUQUJMRX1dOiBBZGQKIAlMaW51eCBzcGVjaWZpYyBvcHRpb25zLgoKCXN5c2NhbGwuYzogVXNlIFNZU19FUlJMSVNUX0RFQ0xBUkVEIGluc3RlYWQgb2YgZ3Vlc3NpbmcuCiAgCVtFe1JFU1RBUlR7U1lTLE5Pe0lOVFIsSEFORH19LE5PSU9DVExDTUR9XTogRXhwbGljaXRseSBkZWZpbmUKIAlpbnN0ZWFkIG9mIGRlcGVuZGluZyBvZiBfX0tFUk5FTF9fLgoKCXRlcm0uYzogQ2FzdCBjX3tpLG8sYyxsfWZsYWcgdG8gbG9uZyB3aGVuIHVzaW5nIHByaW50Zi4KClR1ZSBKdW4gIDYgMDA6Mjc6NDggMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBhY2xvY2FsLm00IChBQ19ERUNMX1NZU19FUlJMSVNULCBBQ19ERUNMX19TWVNfU0lHTElTVCk6IE5ldy4KCSogY29uZmlndXJlLmluOiBDYWxsIEFDX0RFQ0xfU1lTX0VSUkxJU1QsIEFDX0RFQ0xfU1lTX1NJR0xJU1QsCglhbmQgQUNfREVDTF9fU1lTX1NJR0xJU1QuCgkqIGFjY29uZmlnLmggKFNZU19FUlJMSVNUX0RFQ0xBUkVEKTogTmV3LgoJKiBzdHJhY2UuYyAoc3RyZXJyb3IpOiBVc2UgU1lTX0VSUkxJU1RfREVDTEFSRUQuCgkoc3Ryc2lnbmFsKTogVXNlIFNZU19TSUdMSVNUX0RFQ0xBUkVELgoKCW5ldC5jIChzeXNfc29ja2V0KTogT21pdCBpbmFkdmVydGVudCBzdXJwbHVzIGNvbW1hIHdoZW4KCXByb3RvY29sIGZhbWlseSBpc24ndCBQRl9JTkVULgoKCXV0aWwuYyAoZHVtcHN0cik6IEZpeCBpbmNvcnJlY3QgcHJpbnRpbmcgb2Ygb25lIHRvbyBtYW55CgljaGFyYWN0ZXJzIHdoZW4gdGhlIGxlbmd0aCBpcyBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiAxNiBieXRlcy4KCVJlcG9ydGVkIGJ5IEp1ZXJnZW4gV2VpZ2VydAoJPGpud2VpZ2VyQGltbWQ0LmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPi4KClRodSBNYXkgIDQgMjM6Mzc6NDcgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBpb2N0bC5jIChjb21wYXJlKTogQ2hhbmdlIHByb3RvdHlwZSB0byBtYXRjaCBQT1NJWCBxc29ydC4KCSogc2lnbmFsLmMgKHNpZ2lzaGFuZGxlZCkgW1NWUjRdOiBPbWl0IGV2ZXJ5dGhpbmcgYWZ0ZXIgcmV0dXJuLgoJKiBzdHJhY2UuYyAodHJhY2UpIFtTVlI0XTogQnJlYWsgb3V0IG9mIGZvciBsb29wIGluc3RlYWQgb2YKCXJldHVybmluZyB3aGVuIGZpbmlzaGVkIHNvIGZpbmFsIHJldHVybiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQuCgkqIHN5c2NhbGwuYyAoaW50ZXJuYWxfc3lzY2FsbCk6IEFkZCBtb3JlIFNZU193YWl0KiB2YXJpYXRpb25zLgoJKHN5c2NhbGwpIFtMSU5VWF06IENvcnJlY3QgdHlwbyB3aGljaCBjb21tZW50ZWQgb3V0IHRoZSBNNjhLCglhcmd1bWVudCB0byBpZmRlZi4KCSogdXRpbC5jIChwcmludHN0cik6IENhc3QgdW5zaWduZWQgY2hhciBwb2ludGVyIGFyZ3VtZW50Cgl0byBjaGFyIHBvaW50ZXIgaW4gdW1vdmVzdHIgY2FsbC4KCShkdW1wc3RyKTogTGlrZXdpc2UgZm9yIHVtb3Zlbi4KCldlZCBNYXkgIDMgMDE6MTA6NTYgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjQgaXMgcmVsZWFzZWQuCgoJKiBzaWduYWwuYyAoc3lzX3NpZ2Jsb2NrKTogTW92ZSBhZnRlciB0aGUgZGVmaW5pdGlvbiBvZgoJc3lzX3NpZ3NldG1hc2sgdGhhdCBpdCBjYWxscyB0byBhdm9pZCBhbiBpbXBsaWNpdCBkZWNsYXJhdGlvbi4KCSogc3RyZWFtLmMgKHRyYW5zcG9ydF91c2VyX29wdGlvbnMsIHRyYW5zcG9ydF9zZXJ2ZXJfb3B0aW9ucyk6CglPbmx5IG5lZWRlZCBpZiBUSV9CSU5EIGlzIGRlZmluZWQuCgkqIGNvbmZpZ3VyZS5pbjogQWRkIC1Xbm8taW1wbGljaXQgdG8gV0FSTkZMQUdTIG9uIFN1bk9TIDQueC4KCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfZm9yaykgW1NWUjRdOiBGaXggYSB0eXBvIHRoYXQgb21pdHRlZAoJdGhlIHRjcCBhcmd1ZW1lbnQgZnJvbSB0aGUgY2FsbCB0byBleGl0aW5nLiAgQWRkIGdldHJ2YWwyCgljaGVjayBzbyBubyBmb3JrIHByb2Nlc3NpbmcgaXMgZG9uZSBpbiB0aGUgY2hpbGQuCgkocHJpbnR3YWl0bik6IEluaXRpYWxpemUgZXhpdGVkIHNvIHRoYXQgaXRzIHZhbHVlIGlzIGRlZmluZWQKCWZvciBhbGwgZmxvd3Mgb2YgZXhlY3V0aW9uLgoKVHVlIE1heSAgMiAyMjozOTo0MiAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGxpbnV4L2R1bW15Lmg6IEFkZCBhbGlhc2VzIGZvciBzeXNmcywgcGVyc29uYWxpdHksIGFmc19zeXNjYWxsLAoJc2V0ZnN1aWQsIHNldGZzZ2lkLCBhbmQgX2xsc2VlayBzeXNjYWxscy4KCSogbGludXgvc3lzY2FsbC5oOiBBZGQgcHJvdG90eXBlcyBmb3IgdGhlbS4KCSogbGludXgvc3lzY2FsbGVudC5oOiBBZGQgdGhlbSB0byB0aGUgc3lzY2FsbCBlbnRyaWVzIHRhYmxlLgoJKiBzeXN0ZW0uYyAoaGVhZGVycykgW0xJTlVYXTogSW5jbHVkZSBsaW51eC91bmlzdGQuaCB0byBnZXQgX19OUl8qCglkZWZpbmVzIGFuZCBjb25kaXRpb25hbGx5IGluY2x1ZGUgbGludXgvcGVyc29uYWxpdHkuaCBpZgoJX19OUl9wZXJzb25hbGl0eSBpcyBkZWZpbmVkLgoJKHBlcnNvbmFsaXR5X29wdGlvbnMpIFtMSU5VWF06IE5ldyB0YWJsZS4KCShzeXNfcGVyc29uYWxpdHkpIFtMSU5VWF06IE5ldyBmdW5jdGlvbi4KClR1ZSBNYXkgIDIgMDA6MjA6MzkgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBzdHJhY2UuYyAodHJhY2UpIFshU1ZSNF06IENoYW5nZSBmb3JldmVyIGxvb3AgdG8gb25lIHByZWRpY2F0ZWQKCW9uIHRoZSBudW1iZXIgb2YgdHJhY2VkIHByb2Nlc3NlcyBzbyB0aGF0IHdlIGNhbiBoYXZlIHVudHJhY2VkCgljaGlsZHJlbiAoZS5nLiB2aWEgcG9wZW4pLgoKCSogc3RyYWNlIChtYWluKSBbIVNWUjRdOiBDYWxsIGZha2VfZXhlY3ZlIHRvIGdldCB0aGUgYWN0dWFsCglleGVjIGFuZCBpdHMgYXJndW1lbnRzIGludG8gdGhlIHRyYWNlLgoJKGVudmlyb24pOiBEZWNsYXJlIGl0LgoJKiBwcm9jZXNzLmMgKGZha2VfZXhlY3ZlKTogTmV3IGZ1bmN0aW9uLgoJKGhlYWRlcnMpOiBJbmNsdWRlIHN5cy9zeXNjYWxsLmggdG8gZ2V0IFNZU18qIGRlZmluZXMuCgoJKiBwcm9jZXNzLmMgKHN5c19leGVjdiwgc3lzX2V4ZWN2ZSk6IFN1cnJvdW5kIGFyZ3VtZW50IGFubm90YXRpb25zCgl3aXRoIEMgY29tbWVudCBkZWxpbWl0ZXJzLgoJKHByaW50YXJndiwgcHJpbnRhcmdjKTogVGhlIGFyZyB2ZWN0b3IgaXMgYW4gYXJyYXkgb2YgY2hhciBwb2ludGVycwoJbm90IGludHMuCgoJKiBzdHJhY2UuYyAocHJpbnRsZWFkZXIpOiBBbHNvIGNoZWNrIGZvciBtdWx0aXBsZSAtcCBhcmd1bWVudHMKCXdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBwcmludCB0aGUgcGlkIGZpZWxkLgoKCSogc3RyYWNlLmMgKHN0cmVycm9yKSBbIUhBVkVfU1RSRVJST1JdOiBOZXcgZnVuY3Rpb24uCgkqIGRlZnMuaCAoc3RyZXJyb3IsIHN0cnNpZ25hbCk6IEFkZCB0aGVzZSBwcm90b3R5cGVzIGlmIHdlIHByb3ZpZGUKCXRoZSBmdW5jdGlvbnMuCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfRlVOQ1MpOiBBZGQgc3RyZXJyb3IuCgoJKiBzdHJhY2UuYyAobWFpbiwgcHJvY19wb2xsZXIpOiBBZGQgU0lHUElQRSB0byB0aGUgbGlzdCBvZiBjYXVnaHQKCWFuZCBibG9ja2VkIHNpZ25hbHMuCgoJKiBzdHJhY2UuYyAobWFpbik6IEFkZCB1c2VybmFtZSBvcHRpb24uICBWZXJpZnkgdGhleSBhcmUgcm9vdCBiZWZvcmUKCWxldHRpbmcgdGhlbSB1c2UgaXQuICBMb29rIHVwIHRoZSBpZHMgaW4gdGhlIHBhc3N3b3JkIGZpbGUuICBTZXQKCXRoZW0ganVzdCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBwcm9ncmFtLgoJRnJvbSBSZXViZW4gU3VtbmVyIDxyYXN1bW5lckB1bmRlcmdyYWQubWF0aC51d2F0ZXJsb28uY2E+LgoKU2F0IEFwciAyOSAwMDowOTo1NiAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMyBpcyByZWxlYXNlZC4KCgkqIHN5c3RlbS5jIChtb3VudF9mbGFncykgW0xJTlVYXTogT21pdCBkdXBsaWNhdGVkIE1TX05PU1VJRCBlbnRyeS4KCUZyb20gUmV1YmVuIFN1bW5lciA8cmFzdW1uZXJAdW5kZXJncmFkLm1hdGgudXdhdGVybG9vLmNhPi4KCgkqIHN0cmFjZS5jIChvdXRmbmFtZSk6IEluaXRpYWxpemUgdG8gTlVMTC4KCShtYWluKTogRGVmZXIgb3V0cHV0IGZpbGUgcHJvY2Vzc2luZyB1bnRpbCBhZnRlciBhcmd1bWVudHMuCglBbGxvdyBlaXRoZXIgYSBwaXBlIG9yIGEgYmFuZyBmb3IgY29tbWFuZCBhcmd1bWVudHMuCglDaGVjayBpZiBvdXRmbmFtZSBpcyBOVUxMIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0ZiBmb3Igc3RkZXJyLgoJUmVpbml0aWFsaXplIGVhY2ggc3RhcnR1cCBUQ0IncyBvdXRmIHRvIGZpeCAtcC8tbyBvcmRlcmluZyBidWcuCgkoZHJvcHRjYik6IFJlc2V0IGNsb3NlIFRDQidzIG91dGYgdG8gTlVMTCBpbnN0ZWFkIG9mIHN0ZGVyci4KCSh0cHJpbnRmKTogQXZvaWQgY2FsbGluZyB2ZnByaW50ZiBpZiBvdXRmIGlzIE5VTEwuCgoJKiBzdHJhY2UuYyAobWFpbik6IFVzZSBwb3BlbiBpZiAtbyBhcmd1bWVudCBiZWdpbnMgd2l0aCBhIHBpcGUuCglGcm9tIE1hcnR5IExlaXNuZXIgPGxlaXNuZXJAc2RzcC5tYy54ZXJveC5jb20+LgoKCSogcHJvY2Vzcy5jIChwcmludHN0YXR1cyk6IEZpeCBhIHR5cG8gd2hlcmUgV0lGU0lHTkFMRUQgd2FzIG1lYW50CglidXQgV0lGU1RPUFBFRCB3YXMgdXNlZC4KCgkqIE1ha2VmaWxlLmluOiBBZGQgYW4gRVhUUkFfREVGUyB2YXJpYWJsZSBhbmQgdXNlIGl0IGluIHRoZSAuYy5vCglydWxlIHRvIHByZXZlbnQgdGhlIGNvbW1lbnQgZnJvbSBiZWluZyB1bnRydWUuCgpGcmkgQXByIDI4IDIyOjAxOjU2IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogc3RyYWNlLmMgKHN5c19leGl0KTogTW92ZSBmb2xsb3cgZm9yayBjb2RlIHRvIGludGVybmFsX2V4aXQuCgkoc3lzX2ZvcmspOiBNb3ZlIGZvbGxvdyBmb3JrIGNvZGUgdG8gaW50ZXJuYWxfZm9yay4KCShzeXNfZXhlY3YsIHN5c19leGVjdmUpOiBNb3ZlIGZvbGxvdyBmb3JrIGNvZGUgdG8gaW50ZXJuYWxfZXhlYy4KCShzeXNfd2FpdHBpZCwgc3lzX3dhaXQ0KTogTW92ZSBmb2xsb3cgZm9yayBjb2RlIHRvIGludGVybmFsX3dhaXQuCgkodmZvcmtpbmcpOiBSZW1vdmUgdGhpcyBzdGF0aWMgdmFyaWFibGUgYW5kIGNoZWNrIHNjbm8gaW4KCWludGVybmFsX2ZvcmsgaW5zdGVhZC4KCShpbnRlcm5hbF9leGl0LCBpbnRlcm5hbF9mb3JrLCBpbnRlcm5hbF9leGVjLCBpbnRlcm5hbF93YWl0KTogTmV3CglmdW5jdGlvbnMuCgkqIGRlZnMuaDogQWRkIHByb3RvdHlwZXMgZm9yIHRoZSBuZXcgaW50ZXJuYWxfKiBmdW5jdGlvbnMuCgkqIHN5c2NhbGwuYyAoc3lzY2FsbCk6IE1vdmUgc3lzY2FsbCBlbnRlcmluZyB0cmFjZSBxdWFsaWZpZXIgY2hlY2sKCWFuZCByZXByaW50IGNoZWNraW5nIGFmdGVyIGNvbnRleHQgZGVjb2RpbmcgYW5kIHByZWNlZGUgdGhlbSB3aXRoCglhIGNhbGwgdG8gaW50ZXJuYWxfc3lzY2FsbC4gIFByZWNlZGUgc3lzY2FsbCBleGl0aW5nIHRyYWNlCglxdWFsaWZpZXIgY2hlY2sgd2l0aCBhIGNhbGwgdG8gaW50ZXJuYWxfc3lzY2FsbC4KCShpbnRlcm5hbF9zeXNjYWxsKTogTmV3IGZ1bmN0aW9uLgoKCSogZGVmcy5oIChzdHJ1Y3QgdGNiKTogTWFrZSBzY25vIHNpZ25lZC4KCSogc3RyYWNlLmMgKHN5c2NhbGwpIE1ha2UgdV9lcnJvciBzaWduZWQuCglbTElOVVgsIEkzODZdOiBBdm9pZCB1bnNpZ25lZCBjYXN0IGluIGVheCBjaGVjay4KCSogc3lzY2FsbC5jIChzeXNfaW5kaXIpOiBNYWtlIGksIHNjbm8sIGFuZCBuYXJncyBzaWduZWQuCgkqIGRlc2MuYyAoc3lzX3NlbGVjdCk6IE1ha2UgY3VtbGVuIHVuc2lnbmVkCgpNb24gQXByIDI0IDIzOjUyOjQ3IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogbmV0LmMgKHNvY2t0eXBlcyk6IEFkZCBTT0NLX1BBQ0tFVC4KClN1biBBcHIgIDIgMjM6NTA6MzkgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBNYWtlZmlsZSAoY2xlYW4pOiBDaGVjayBleHBsaWNpdGx5IGZvciBhIE1ha2VmaWxlIGluIHN1YmRpcnMKCWJlZm9yZSBydW5uaW5nIG1ha2UgaW4gdGhlbS4KClN1biBNYXIgMjYgMTI6Mzc6MjEgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBzdHJhY2UuYyBbTUlQU10gKHByb2Nfb3Blbik6IENvbmRpdGlvbmFsaXplIHJ1biBvbiBNSVBTLgoJW01JUFNdIChkZXRhY2gpOiBJbml0aWFsaXplIGVycm9yIGZvciBNSVBTIGNhc2UuCgkodHJhY2UpOiBJbml0aWFsaXplIGlvY3RsX3Jlc3VsdCBhbmQgaW9jdGxfZXJybm8gZm9yIG92ZXJseSBoZWxwZnVsCgljb21waWxlcnMuCgkqIHN5c2NhbGwuYyAoZGVjb2RlX3N1YmNhbGwpOiBNb3ZlIHZhcmlhYmxlIGkgaW50byBjb25kaXRpb25hbHMKCXRoYXQgdXNlIHVzZSBpdC4KCSogc3lzdGVtLmMgKHN5c3NnaV9vcHRpb25zKTogQ29uZGl0aW9uYWxpemUgU0dJX1JFQ1ZMTVNHIGFuZAoJU0dJX1NFVF9GUERFQlVHIHRoYXQgU0dJIGRlY2lkZWQgdG8gZHJvcC4gIEkgZG9uJ3QgaGF2ZSB0aGUgc3RvbWFjaAoJdG8gY2hhbmdlIHRoZW0gYWxsLgoJKiB0ZXJtLmMgKHRlcm1faW9jdGwpOiBGb3JjZSBbY19baW9jbF1mbGFncyBtZW1iZXJzIHRvIGxvbmcgYmVmb3JlCglwcmludGluZyBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHNpemUgb2YgdGhlaXIgdHlwZSBpcy4KCSogdXRpbC5jIFtTVlI0LCBNSVBTXSAodW1vdmVuKTogUHJldmVudCBNSVBTIGZyb20gdXNpbmcgcHJlYWQgZXZlbgoJaWYgYXV0b2NvbmYgZGV0ZWN0cyBpdCBzaW5jZSBpdCBzZWVtcyB0byBlaXRoZXIgbm90IHdvcmsgb3IgZG8KCXNvbWV0aGluZyBlbHNlIGVudGlyZWx5IG9uIElyaXggNS4zLgoKU3VuIE1hciAyNiAwMDowMToxMSAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMiBpcyByZWxlYXNlZC4KCSogbGludXgvZHVtbXkuaDogTWFrZSBzeXNfZmNoZGlyIGxpa2Ugc3lzX2Nsb3NlIGluc3RlYWQgb2YgcHJpbnRhcmdzCglzbyB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgYXJnIGlzIGRlY2ltYWwuCgpTYXQgTWFyIDI1IDIyOjUwOjEzIDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogbmV0LmMgW0xJTlVYXSAocHJvdG9jb2xzKTogRXhwbGljaXRseSBkZWZpbmUgYWxsIElQUFJPVE9fKiBlbnRyaWVzCgliZWNhdXNlIG9uIExpbnV4IHRoZXkgYXJlIGVudW1lcmF0b3JzLgoKCSogc3lzdGVtLmMgW0xJTlVYXSAobW91bnRfZmxhZ3MpOiBIYW5kbGUgcmVuYW1pbmcgb2YgTVNfU1lOQyB0bwoJTVNfU1lOQ0hST05PVVMuCgoJKiB1dGlsLmMgKHByaW50eHZhbCk6IFdoZW4gdGhlcmUgaXMgbm8gdHJhbnNsYXRpb24sIHByaW50IHRoZSBhY3R1YWwKCW51bWJlciBmaXJzdCBhbmQgdGhlIHRoZSBkZWZhdWx0IHZhbHVlIGFzIGEgQyBjb21tZW50LgoKCSogbmV0LmMgKHN5c19zZW5kLCBzeXNfc2VuZHRvLCBzeXNfc2VuZG1zZywgc3lzX2dldHNvY2tvcHQsCglzeXNfc2V0c29ja29wdCk6IENoYW5nZSBmaXJzdCBhcmd1bWVudCBmcm9tIHVuc2lnbmVkIHRvIHNpZ25lZCB0bwoJY2F0ZXIgdG8gdGhlIGZyZXF1ZW50IHByYWN0aWNlIG9mIGNhbGxpbmcgc3lzdGVtIGNhbGxzIHdpdGggYSBmaWxlCglkZXNjcmlwdG9yIG9mIC0xLgoJKiBtZW0uYyAoc3lzX21tYXApOiBMaWtld2lzZS4KClN1biBNYXIgMTkgMTM6NTM6NTIgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBzaWduYWwuYyBbTElOVVhdIChzaWduYWxlbnQpOiBIYW5kbGUgb2xkIGFuZCBuZXcgdmFsdWVzIG9mIFNJR0lPLgoKU3VuIERlYyAxMSAyMjo1MTo1MSAxOTk0ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMSBpcyByZWxlYXNlZC4KCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZS5pbiwgYWNsb2NhbC5tNDogQ2hhbmdlcyBmb3IgYXV0b2NvbmYgMi4wLgoJKiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5ndWVzczogVXBkYXRlIGZyb20gdGhlIEZTRi4KCSogaW5zdGFsbC1zaDogTmV3IGZyb20gdGhlIEZTRi4KCk1vbiBEZWMgIDUgMjA6NTE6MjkgMTk5NCAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBNYWtlZmlsZS5pbjogQWRkIG02OGsgYXJjaC4KCSogYWNjb25maWcuaCAoTTY4Syk6IEFkZCBtNjhrIGRlZmluZS4KCSogY29uZmlndXJlLmluOiBBZGQgZGV0ZWN0aW9uIG9mIGFyY2ggbTY4ay4KCSogcHJvY2Vzcy5jIFtNNjhLXSAoc3RydWN0X3VzZXJfb2Zmc2V0cyk6IFN1cHBvcnQgbTY4ayByZWdpc3RlcnMgYW5kCglvZmZzZXRzLgoJKiBzaWduYWwuYyBbTTY4S10gKHNpZ2NvbnRleHRfc3RydWN0KTogU3VwcG9ydCBtNjhrIHNpZ2NvbnRleHQKCXN0cnVjdHVyZS4KCVtNNjhLXSAoc3lzX3NpZ3JldHVybik6IFN1cHBvcnQgbTY4ayBzaWdyZXR1cm4gaGFuZGxpbmcuCgkqIHN5c2NhbGwuYyBbTTY4S10gKHN5c2NhbGwpOiBTdXBwb3J0IG02OGsgc3lzY2FsbCBudW1iZXIgcmVnaXN0ZXIKCWFuZCBlcnJubyBpbiBkMCBpbnN0ZWFkIG9mIGVheC4KCSogdXRpbC5jIFtNNjhLXSAoZ2V0cGMsIHByaW50Y2FsbCwgc2V0YnB0LCBjbGVhcmJwdCk6IFN1cHBvcnQgbTY4awoJcHJvZ3JhbSBjb3VudGVyIGluIFBUX1BDIGluc3RlYWQgb2YgRUlQLgoJW002OEtdIChMT09QKTogU3VwcG9ydCBtNjhrIGxvb3AgaW5zdHJ1Y3Rpb24uCglGcm9tIEFuZHJlYXMgU2Nod2FiIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+LgoKCSogbWVtLmMgW01BUF9BTk9OWU1PVVNdIChtbWFwX2ZsYWdzKTogQ29ycmVjdCBpbmFkdmVydGVudCByZWZlcmVuY2UKCXRvIE1BUF9GSVhFRCBpbnN0ZWFkIG9mIE1BUF9BTk9OWU1PVVMuCglGcm9tIEFuZHJlYXMgU2Nod2FiIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+LgoKCSogc2lnbmFsLmMgW0xJTlVYXSAoc2lnbmFsZW50KTogU2lnbmFsIDMwIGlzIG5vdyBTSUdQV1IuCglGcm9tIEFuZHJlYXMgU2Nod2FiIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+LgoKTW9uIERlYyAgNSAwMTowNTo0NiAxOTk0ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGRlZnMuaCAodHByaW50Zik6IEZpeCB0eXBvIGluIG5vbi1nY2MgYW5zaSBwcm90b3R5cGUgZm9yIHRwcmludGYuCglSZXBvcnRlZCBieSBUaGFuaCBNYSA8dG1hQGVuY29yZS5jb20+LgoKCSogc3RyYWNlLmMgKGNsZWFudXApOiBTZW5kIFNJR0NPTlQgYmVmb3JlIFNJR1RFUk0gYmVjYXVzZSBMaW51eAoJMS4xLjYyIGRvZXNuJ3QgY29udGludWUgYSB0cmFjZWQgY2hpbGQgd2hlbiB0aGUgcGFyZW50IGV4aXRzLgoJUmVwb3J0ZWQgYnkgTWF0dCBEYXkgPG1kYXlAYXJ0aXNvZnQuY29tPi4KCgkqIHN5c3RlbS5jIFtMSU5VWF06IEluY2x1ZGUgbmV0aW5ldC9pbi5oIGJlZm9yZSBhcnBhL2luZXQuaC4KCgkqIHV0aWwuYyAocHJpbnRzdHIpOiBGaXggbG9uZ3N0YW5kaW5nIGJ1ZyBpbiBub3RhdGluZyBzdHJpbmcKCWNvbnRpbnVhdGlvbi4KCgkqIHN0cmFjZS5jIFtTVlI0XSAocHJvY19vcGVuKTogU3BlY2lmaWNhbGx5IHdhaXQgZm9yIHRoZSBjaGlsZCB0aGUKCWNoaWxkIHRvIGdvIGludG8gdGhlIGV4ZWN2ZSBzeXNjYWxsIHRvIGF2b2lkIHNwdXJpb3VzIHRyYWNlcy4KCVtMSU5VWF0gKGRldGFjaCk6IENvbmRpdGlvbmFsaXplIHRoZSBzdGF0dXMgdmFyaWFibGUuCgpTdW4gRGVjICA0IDIzOjIxOjQyIDE5OTQgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogTWFrZWZpbGUuaW46IEFkZCBtaXBzIGFyY2guCgkqIGFjY29uZmlnLmggKE1JUFMpOiBBZGQgbWlwcyBkZWZpbmUuCgkqIGNvbmZpZ3VyZS5pbjogQWRkIGRldGVjdGlvbiBvZiBvcHN5cyBpcml4NSBhbmQgYXJjaCBtaXBzLiAgQ2hlY2sKCWZvciBwcmN0bCBmdW5jdGlvbi4KCUNoZWNrIGZvciBzeXMvc3lzY29uZmlnLmggaGVhZGVyLgoJKiBkZWZzLmggKE1BWF9BUkdTKTogQnVtcCBtYXhpbXVtIHN5c2NhbGwgYXJndW1lbnRzIGZyb20gOCB0byAzMi4KCSogZmlsZS5jIFtTVlI0XTogSW5jbHVkZSBzeXMvY3JlZC5oLgoJKGFjY2Vzc19mbGFncyk6IFVwZGF0ZSBhY2Nlc3MgZmxhZ3MgZm9yIFNHSS4KCShzcHJpbnR0aW1lKTogQ2hhbmdlIHR5cGUgb2Ygc3ByaW50dGltZSBhcmd1bWVudCBmcm9tIHVuc2lnbmVkCglsb25nIHRvIHRpbWVfdC4KCSogcHJvY2Vzcy5jIFtIQVZFX1BSQ1RMXTogSW5jbHVkZSBzeXMvcHJjdGwuaC4KCVtIQVZFX1BSQ1RMXSAocHJjdGxfb3B0aW9ucywgc3lzX3ByY3RsKTogTmV3IGZvciBTR0kuCgkocHJpbnRzaWdpbmZvKTogQ29uZGl0aW9uYWxseSBjb21waWxlIFNJX1RJTUVSIGFuZCBTSV9NRVNHUS4KCUNhc3Qgc2lfYmFuZCBtZW1iZXIgdG8gbG9uZyBiZWZvcmUgcHJpbnRpbmcuCgkqIHNpZ25hbC5jIChzaWdhY3RfZmxhZ3MpOiBBZGQgX1NBX0JTRENBTEwgZm9yIFNHSS4KCShzaWdwcm9jbWFza2NtZHMpOiBBZGQgU0lHX1NFVE1BU0szMiBmb3IgU0dJLgoJKiBzdHJhY2UuYyBbU1ZSNF0gW01JUFNdOgoJKGZvb2Jhcik6IE5ldyBkdW1teSBzaWduYWwgaGFuZGxlci4KCShtYWluKTogSW5zdGFsbCBhIGR1bW15IHNpZ25hbCBoYW5kbGVyIGluIHRoZSBjaGlsZCBiZWZvcmUgcGF1c2luZwoJdG8gd29yayBhcm91bmQgYW4gU0dJIGJ1ZyBpbiBQUlNBQk9SVC4KCShwcm9jX29wZW4pOiBTZW5kIGEgaW50ZXJydXB0IHRvIHRoZSBjaGlsZCBpbnN0ZWFkIG9mIGFib3J0aW5nIHRoZQoJc3lzY2FsbCB3aGljaCBkb2Vzbid0IHdvcmsgb24gSXJpeDUuMi4KCSogc3ZyNC9kdW1teS5oOiBBZGQgbmV3IHVuZmluaXNoZWQgU0dJIHN5c2NhbGxzCgkoZS5nLiBzeXNfc3lzbXAsIHN5c19zZ2luYXAsIGV0Yy4pLiAgSGFuZGxlIHNvbWUgU0dJIHN5c2NhbGxzIGxpa2UKCWV4aXN0aW5nIGNhbGxzIChlLmcuIHN5c19rc2lnYWN0aW9uIGxpa2Ugc3lzX3NpZ2FjdGlvbikuCglQcmludGFyZ3MgZG9lcyB0aGUgcHJpbnQgdGhpbmcgZm9yIHN5c19zZXRob3N0aWQuCgkqIHN2cjQvc3lzY2FsbC5oOiBEZWNsYXJlIGFsbCBuZXcgU0dJIHN5c2NhbGxzLgoJKFNHSV9LTFVER0UpOiBEZWZpbmUgc3lzY2FsbCB0YWJsZSBzdGFydGluZyBpbmRleCB0byBiZSAxIGZvciBTR0kKCWFuZCBhZGQgaXQgdG8gYWxsIHN1YmNhbGwgZW50cnkgcG9pbnRzLgoJKFNZU19wZ3Jwc3lzX3N1YmNhbGwsIFNZU19zaWdjYWxsX3N1YmNhbGwsIFNZU19jb250ZXh0KTogRG9uJ3QKCWRlY29kZSBhcyBzdWJjYWxscyBvbiBNSVBTLiBJbnN0ZWFkLCB1c2UgdGhlIG5vcm1hbCBzeXNjYWxscy4KCSogc3ZyNC9zeXNjYWxsZW50LmggW01JUFNdOiBMZWFkIHN5c2NhbGwgdGFibGUgd2l0aCBhIGR1bW15IGVudHJ5CglzaW5jZSBTR0kgc3lzY2FsbCBudW1iZXJzIGFyZSBvZmYgYnkgb25lLgoJW01JUFNdIChzeXNfcGdycHN5cyk6IFJlbmFtZSB0byBzeXNfc2V0cGdycCBvbiBTR0kuCglbTUlQU10gKHN5c194ZW5peCk6IFJlbmFtZSB0byBzeXNfc3lzc2dpIG9uIFNHSS4KCVtNSVBTXSAoc3lzX3N5c21hY2hpbmUpOiBSZW5hbWUgdG8gc3lzX3N5c21pcHMgb24gU0dJLgoJW01JUFNdOiBDb25kaXRpb25hbGl6ZSBTVlI0IGV4dGVuc2lvbiBpbnRvIFNHSSBhbmQgU29sYXJpcyBjbGFzc2VzLgoJKiBzeXNjYWxsLmMgKGR1bXBpbyk6IFZhbGlkYXRlIGRlc2NyaXB0b3IgYWdhaW5zdCBNQVhfUVVBTFMuCglbSEFWRV9QUl9TWVNDQUxMXSAoc3lzY2FsbCk6IENvbmRpdGlvbmFsaXplIFNZU192Zm9yay4KCVtNSVBTXSAoc3lzY2FsbCk6IEFkZCBTR0kgc2VjdGlvbiBmb3IgZGVjb2RpbmcgdV9lcnJvciBhbmQgdV9ydmFsLgoJQWRkIHdvcmthcm91bmQgZm9yIGJyb2tlbiBTR0kgcHJfc3lzYXJnIG9uIHN5c2NhbGwgZW50cnkuCglbU1ZSNF0gKHN5c2NhbGwpOiBDb25kaXRpb25hbGl6ZSBzdWJjYWxsIGRlY29kaW5nIGZvcgoJU1lTX3B0cnBzeXNfc3ViY2FsbCwgU1lTX3NpZ2NhbGxfc3ViY2FsbCBhbmQgU1lTX2NvbnRleHRfc3ViY2FsbC4KCVtTVlI0XSBbTUlQU10gKGdldHJ2YWwyKTogSGFuZGxlIFNHSS4KCSogc3lzY2FsbGVudC5zaDogRG9yayB0aGUgc2VkIGxpbmUgdG8gYmUgY2hvb3NpZXIgYWJvdXQgU1lTXyBsaW5lcy4KCSogc3lzdGVtLmMgW0hBVkVfU1lTQ09ORklHX0hdOiBJbmNsdWRlIHN5cy9zeXNjb25maWcuaC4KCVtNSVBTXSAoc3lzc2dpX29wdGlvbnMsIHN5c19zeXNzZ2kpOiBOZXcgZm9yIFNHSS4K